4

在 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 中的标准行为 - 例如尝试在单击收件箱后立即旋转 MAIL 应用程序 - 它完成幻灯片转换然后旋转。Stocks 应用程序等也是如此。如果我使用标准的 Push 动画等,就会发生这种情况。但我有自己的动画要做。

那么他们是怎么做到的呢?

如何防止(即延迟或阻止)方向更改,直到我的动画完成?我可以通过在 shouldAutorotateToInterfaceOrientation: 中说 NO 来轻松停止更改:当我制作动画但之后我需要它来进行定向。我可以调用 attemptRotationToDeviceOrientation 但肯定有更好的方法 - segue 本身应该能够在不被中断的情况下完成。

4

1 回答 1

4

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

于 2012-08-17T21:14:01.117 回答