在iOS(版本5很好)中,我有一个自定义动画来翻转和缩放从一个UIViewController转换到另一个UIViewController的图像:
TCFlipZoomSubviewSegue segue=[[TCFlipZoomSubviewSegue alloc] initWithIdentifier:@"SegueToMenuTable" source:self.iViewController destination:self.mViewController];
[segue perform];
并且在执行方法中我有:
[UIView animateWithDuration:3.75f
delay:0.0f
options:UIViewAnimationOptionAllowAnimatedContent
animations:^{
self.subviewTransformView.layer.transform=transform;
} completion:^(BOOL finished) {
[destination.parentViewController.view bringSubviewToFront:destination.view];
}
一切正常,但如果我在动画期间旋转设备,会出现各种问题(布局混乱)。我想要的是动画在定向事件发生之前完成 - 这是iPhone中的标准行为 - 例如,在点击INBOX后立即尝试旋转MAIL应用程序 - 它完成幻灯片过渡然后旋转。与股票应用程序等相同。这就是如果我使用标准的Push动画等会发生什么。但我有我自己的动画。
那他们怎么做呢?
在动画结束之前,如何防止(即延迟或阻止)方向更改?我可以通过在shouldAutorotateToInterfaceOrientation中输入NO来轻松地停止更改:当我进行动画制作但后来我需要它来进行定位。我可以调用attemptRotationToDeviceOrientation但肯定必须有更好的方法 - segue本身应该能够完成而不会被打断......
这是我的第一篇文章,非常感谢任何帮助。
答案 0 :(得分:4)
我认为您提到的方式可能是您必须这样做的方式 - 也就是说,将NO返回到shouldAutorotateToInterfaceOrientation :,然后在动画完成时调用attemptRotationToDeviceOrientation。如果用户在动画进行过程中尝试旋转,您可能需要设置某种标志,这样您就可以知道在动画结束时是否应该调用attemptRotationToDeviceOrientation。