viewWillTransitionToSize协调器忽略块

Dea*_*ids 4 rotation uiviewcontroller ios

尝试游戏新的旋转方法,我需要知道设备是否正在旋转,以便推迟和取消旋转时不需要的动作.

-(void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
{
    [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];

    _rotating = YES;

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        _rotating = NO;
    }];
}
Run Code Online (Sandbox Code Playgroud)

看起来很直接,应该根据我对文档的解释工作,但显然没有.似乎_rotating被设置为YES并且永远不会被设置回NO.因此,似乎永远不会调用我的完成块.

Raf*_*fAl 8

我有同样的问题.我潜入了文档.在以下情况下notifyWhenInteractionEndsUsingBlock调用您指定的块:

当转换从交互式更改为非交互式时,将调用处理程序.

但是,轮换不是交互式过渡.一旦启动,您就无法与之互动.这就是永远不会调用处理程序的原因.

我最终使用animateAlongsideTransition:completion:方法.它就像一个魅力.

- (void)viewWillTransitionToSize:(CGSize)size
       withTransitionCoordinator:(id <UIViewControllerTransitionCoordinator>)coordinator
{
    _rotating = YES;

    [super viewWillTransitionToSize:size
          withTransitionCoordinator:coordinator];

    [coordinator animateAlongsideTransition:nil
                                 completion:^(id<UIViewControllerTransitionCoordinatorContext> context)
     {
        _rotating = NO;
     }];
}
Run Code Online (Sandbox Code Playgroud)