iOS 9 界面旋转结束时回调?

Luk*_*uke 3 transition uiviewcontroller uiview uiinterfaceorientation ios9

我还没有看到这个问题的明确答案,围绕 iOS 8 的变化有很多噪音,但我想在 iOS 9 上解决这个问题:

\n\n

界面方向更改结束后获取回调的正确方法是什么?

\n\n

从 iOS 9 开始,didRotateFromInterfaceOrientation:它已被弃用,官方文档告诉我们改用它viewWillTransitionToSize:withTransitionCoordinator。这为我们(通过transitionCoordinator)提供了一种沿着过渡进行动画处理的方法和一个完成块,但没有对过渡的真实 \xe2\x80\x98end\xe2\x80\x99 进行直接回调。

\n\n

另一种方法是transitionCoordinatornotifyWhenInteractionEndsUsingBlock:但这似乎报告了过渡的交互部分的结束,而不是整个事情。

\n\n

那么, \xe2\x80\x9cofficial\xe2\x80\x9d 的方法是执行此操作animateAlongsideTransition:completion,并简单地忽略动画选项吗?

\n\n

我意识到我们仍然可以使用旧的didRotateFromInterfaceOrientation:,但它\xe2\x80\x99s 总是更好地尽可能现代化。

\n

小智 5

是的,您可以忽略动画选项,只需使用“nil”即可。

WWDC 2014“iOS 8 中的视图控制器改进”示例:

- (void) viewWillTransitionToSize:(CGSize)s withTransitionCoordinator:(UIVCTC)t
{
    orientation = [self orientationFromTransform: [t targetTransform]];
    oldOrientation = [[UIApplication sharedApplication] statusBarOrientation];

    [self myWillRotateToInterfaceOrientation:orientation duration:duration];

    [t animateAlongsideTransition:^(id <UIVCTCContext>) {
        [self myWillAnimateRotationToInterfaceOrientation:orientation duration:duration];
    } 
    completion: ^(id <UIVCTCContext>) {
        [self myDidAnimateFromInterfaceOrientation:oldOrientation];
    }];
}
Run Code Online (Sandbox Code Playgroud)

与 iOS 9 配合良好。