在iOS中,如何在自定义动画(segue)期间延迟自动旋转

时间:2012-08-17 14:09:28

标签: ios cocoa-touch orientation

在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本身应该能够完成而不会被打断......

这是我的第一篇文章,非常感谢任何帮助。

1 个答案:

答案 0 :(得分:4)

我认为您提到的方式可能是您必须这样做的方式 - 也就是说,将NO返回到shouldAutorotateToInterfaceOrientation :,然后在动画完成时调用attemptRotationToDeviceOrientation。如果用户在动画进行过程中尝试旋转,您可能需要设置某种标志,这样您就可以知道在动画结束时是否应该调用attemptRotationToDeviceOrientation。