UIDeviceOrientationDidChangeNotification връща UIOrientationLandscapeLeft за UIOrientationLandscapeRight

Регистрирам своя контролер за изглед за UIDeviceOrientationDidChangeNotification и той връща грешна ориентация на устройството. Регистрирам го във функцията init на viewcontroller

[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleOrientationChangeNotification:) name: UIDeviceOrientationDidChangeNotification object: nil];

Това е методът за получаване на известия на моето устройство.

-(void)handleOrientationChangeNotification:(NSNotification *)notification
{ 
    if(IS_IPHONE)
    {
        UIDeviceOrientation currentDeviceOrientation =  [[UIDevice currentDevice] orientation];
    .
    .
    .
}

Всеки път, когато ориентацията на устройството се промени, винаги получавам грешна ориентация.


person Sunil Pandey    schedule 15.10.2012    source източник
comment
Това може да ви помогне stackoverflow.com /questions/4330979/   -  person Mary Zareah    schedule 15.10.2012
comment
кодът изглежда добре и работи.. премахнали ли сте отметката на автоматичното оформление в xib..?   -  person vishy    schedule 15.10.2012
comment
вероятно това се случва, защото Apple промени начина си на ориентация в iOS6, както Apple правеше в предишни версии.   -  person Kamar Shad    schedule 15.10.2012


Отговори (2)


Намирам решението на сайта на Apple на този връзка

UIDeviceOrientationLandscapeRight се присвоява на UIInterfaceOrientationLandscapeLeft, а UIDeviceOrientationLandscapeLeft се присвоява на UIInterfaceOrientationLandscapeRight. причината за това е, че завъртането на устройството изисква завъртане на съдържанието в обратна посока.

person Sunil Pandey    schedule 15.10.2012

Това вероятно се случва, защото Apple промени начина на управление на ориентацията на UIViewController. В Ios6 Oreintation се справя по различен начин, в iOS6 shouldAutorotateToInterfaceOrientation методът е остарял. Контейнерите на iOS (като UINavigationController) не се консултират със своите деца, за да определят дали трябва да се завъртат автоматично. По подразбиране поддържаните ориентации на интерфейса на приложението и контролера за преглед са зададени на UIInterfaceOrientationMaskAll за идиома на iPad и UIInterfaceOrientationMaskAllButUpsideDown за идиома на iPhone.

За повече информация относно същото Трябва да посетите тази връзка По-долу съм направил категорията за обработка на промяната на ориентацията.

Така че ще трябва да приложите още два метода за управление на ориентацията на UIViewController в iOS6.

Въведено в IOS6 Разрешаване на промяна на ориентацията

 - (BOOL)shouldAutorotate
  {

    return YES;

  }

Върнете номера на ориентация, който ще се поддържа в устройството

 - (NSUInteger)supportedInterfaceOrientations
 {
    return  UIInterfaceOrientationMaskAll;

 }

Сега проверете каква ориентация получавате.

РЕДАКТИРАНЕ: Поставете този код във вашия FirstViewController, добавен като основен ViewController. Това ще помогне на UIViewController да определи неговата ориентация.

@implementation UINavigationController (RotationIn_IOS6)

 -(BOOL)shouldAutorotate
  {
   return [[self.viewControllers lastObject] shouldAutorotate];
  }

  -(NSUInteger)supportedInterfaceOrientations
 {
   return [[self.viewControllers lastObject] supportedInterfaceOrientations];
 }

 - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
 {
   return [[self.viewControllers lastObject] preferredInterfaceOrientationForPresentation];
 }

 @end

Надявам се да съм ти полезен.

person Kamar Shad    schedule 15.10.2012
comment
Благодаря @Kamarshad. но всъщност функциите за ориентация нямат нищо общо с моя код. Въпреки това намерих решението и го публикувах като отговор на моя въпрос - person Sunil Pandey; 15.10.2012