Изменение ориентации

#iphone #ios #uiinterfaceorientation

#iPhone #iOS #ориентация uiinterfaceorientation

Вопрос:

есть ли какая-либо разница, когда мы используем следующие два метода для изменения ориентации в iOS.

1) Использование NotificationCenter

 [[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChange) name:UIDeviceOrientationDidChangeNotification object:nil];

-(void) orientationChange
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
    NSLog(@"Orientation =%d",orientation);
    NSLog(@"in Testtt");
}
  

2) Методы делегирования ориентации ViewController

 - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    if(UIInterfaceOrientationLandscapeRight == interfaceOrientation || UIInterfaceOrientationLandscapeLeft == interfaceOrientation)
        return YES;
    else 
        return NO;
}
  

Ответ №1:

В первом случае вы получите UIDeviceOrientation. [[UIDevice currentDevice] orientation] возвращает UIDeviceOrientation, ориентацию устройства. Но обратите внимание, что ориентация UIDeviceOrientation не всегда является ориентацией UIInterfaceOrientation. Например, когда ваше устройство находится в обычной таблице, вы можете получить неожиданное значение ( UIDeviceOrientationUnknown ).

В shouldAutorotateToInterfaceOrientation методе вы можете получить доступ к UIInterfaceOrientation, текущей ориентации интерфейса.