2010-01-04 6 views
0

Внизу есть мой код, который вызывается при повороте iPhone.Проблема с ориентацией на iPhone

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
switch (interfaceOrientation) { 
    case UIInterfaceOrientationPortrait: 
        // some action 
     return YES; 
    case UIInterfaceOrientationLandscapeLeft: { 
        // some action 
     return NO; 
    } 
    case UIInterfaceOrientationLandscapeRight: { 
        // some action 
     return NO; 
    } 
    default: 
     return NO; 
     break; 
} 

}

Я думал, что это достаточно, но потом я заметил, что

case UIInterfaceOrientationPortrait: 

никогда не вызывается. Что мне делать? Должен ли я использовать значение по умолчанию? Может быть, это не лучшее решение, или это так?

ответ

2

Ok. Я нашел ответ. При повороте телефона появляется уведомление.

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

и

- (void)receivedRotate:(NSNotification*)notif { 
UIDeviceOrientation interfaceOrientation = [[UIDevice currentDevice] orientation]; 
switch (interfaceOrientation) { 
    case UIInterfaceOrientationPortrait: { 
     break; 
    } 
    case UIInterfaceOrientationLandscapeLeft: { 
     break; 
    } 
    case UIInterfaceOrientationLandscapeRight: { 
     break; 
    } 
    default: 
     break; 
} 

}

Используйте его;)

0

Это должно быть адекватно, если вы просто хотите использовать портретную ориентацию.

Где вы пересилили эту функцию? Он должен находиться в верхнем контроллере.

+0

это в моем верхнем контроллере представления ... это называется каждый раз я изменить альбомной, но когда я изменяю назад к портрету это не называется ... Я не знаю, почему :( –

+0

Как он может измениться в ландшафт, вы возвращаете НЕТ, так что это не возможно. Вероятно, поэтому он не звонит, когда возвращается к портрету, потому что Вы е Это всегда портрет. Попытайтесь вернуть YES при смене в Landscape и посмотрите, сделан ли портретный вызов. –

+0

Я не хочу менять ландшафт, я просто делаю некоторые действия, когда телефон меняется на пейзаж, но я не хочу, чтобы весь пейзаж был изменен, просто некоторые значки. –

0

Я только что передал ваш код примерному приложению и его рабочий режим с заданным кодом, когда я изменяю ориентацию на пейзаж, ничего не происходит с ориентацией f на вид. Один из способов заключается в разработке вид отдельно для каждой ориентации, и ДА вернуться ко всем ориентаций и использовать следующее свойство

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation) 
    interfaceOrientation duration:(NSTimeInterval)duration { 
    if (interfaceOrientation == UIInterfaceOrientationPortrait 
     || interfaceOrientation == 
      UIInterfaceOrientationPortraitUpsideDown) { 
     //design your portrait view eg: for button, button.frame = CGRectMake(x,y,w,h) 
    } 
    else { 
     //design for the landscape 
    } 
}