2010-06-01 2 views
4

Можно ли отключить анимацию для авторотации? Я хочу, чтобы он вращался, но я просто не хочу, чтобы анимация произошла (как мгновенный переключатель).iphone авторотация анимация

+0

Анимация - это красота! –

+0

Ну, я настроил его так, чтобы изображение BG изменялось либо в горизонтальном, либо в вертикальном вариантах изображения в зависимости от ориентации, и анимация вращения вызывала сбой, когда изображение менялось, но я играл с ним и заставлял его смотреть все равно. – Brodie

ответ

4

Просто добавьте следующий код для перезаписи стандартной анимации вращения:

- (void)viewDidLoad 
{ 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:UIDeviceOrientationDidChangeNotification object:nil]; 
} 

- (void)didRotate:(NSNotification *)notification { 
    orientation = [[UIDevice currentDevice] orientation]; 
    if(orientation == UIDeviceOrientationUnknown || orientation == UIDeviceOrientationFaceDown || orientation == UIDeviceOrientationFaceUp){ 
     orientation = UIDeviceOrientationPortrait; 
    } 
    [[UIApplication sharedApplication] setStatusBarOrientation:orientation animated:NO]; 
    [self positionScreenElements]; 
} 
+1

Этот ответ работал отлично, но у меня были некоторые проблемы при фокусировке текстового поля. Если iPad лежал на столе, то клавиатура показывала половину экрана - очень странно. Проблема заключалась в том, что ориентация устройства также может быть неизвестной, лицевой стороной вверх или вниз, ни одна из которых не соответствует ориентации строки состояния. Проверка на эти состояния сделала это совершенным. Большое спасибо Нильс за спасение меня с этим решением :) –

+0

+1 adam для вас вклад:] –

+0

Что такое «ориентация»? – Morkrom

7

Если вам действительно нужно, просто использовать setAnimationsEnabled из UIView:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    [UIView setAnimationsEnabled:NO]; // disable animations temporarily 
} 

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    [UIView setAnimationsEnabled:YES]; // rotation finished, re-enable them 
} 

Это делает трюк для меня. Конечно, это не рекомендуется делать, если у вас нет веских оснований для этого.

+0

это здорово !, спасибо! –

0

@Nils Munch, к сожалению, это не работает должным образом, setStatusBarOrientation ожидает UIInterfaceOrientation не UIDeviceOrientation и отливка - это плохая практика. Исправьте меня, если я ошибаюсь