Да, анимацию можно отключить, не разбивая все на части.
Следующие коды отключат анимацию вращения «черного ящика», не мешая другим анимациям или коду ориентации:
- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation {
[UIView setAnimationsEnabled:YES];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
[UIView setAnimationsEnabled:NO];
/* Your original orientation booleans*/
return TRUE;
}
Поместите его в свой UIViewController, и все должно быть хорошо.Тот же метод может быть применен к любой нежелательной анимации в iOS.
Удачи в вашем проекте.
В 2016 году, похоже, shouldAutorotateToInterfaceOrientation
недоступно для переопределения.Следующее, кажется, работает и не причиняет никакого другого вреда.
// these DO SEEM TO WORK, 2016
override func willRotateToInterfaceOrientation(
toInterfaceOrientation:UIInterfaceOrientation, duration:NSTimeInterval)
{
UIView.setAnimationsEnabled(false)
super.willRotateToInterfaceOrientation(toInterfaceOrientation,duration:duration)
}
override func didRotateFromInterfaceOrientation(
fromInterfaceOrientation:UIInterfaceOrientation)
{
super.didRotateFromInterfaceOrientation(fromInterfaceOrientation)
UIView.setAnimationsEnabled(true)
}
Однако !! Действительно, обе эти функции устарели.viewWillTransitionToSize
теперь заботится как о «до», так и о «после».
override func viewWillTransitionToSize(size:CGSize,
withTransitionCoordinator coordinator:UIViewControllerTransitionCoordinator)
{
coordinator.animateAlongsideTransition(nil, completion:
{_ in
UIView.setAnimationsEnabled(true)
})
UIView.setAnimationsEnabled(false)
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator);
}