viewWillTransitionToSize协调器忽略块

时间:2014-10-29 11:36:36

标签: ios uiviewcontroller rotation

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

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

    _rotating = YES;

    [coordinator notifyWhenInteractionEndsUsingBlock:^(id<UIViewControllerTransitionCoordinatorContext> context) {
        _rotating = NO;
    }];
}

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

1 个答案:

答案 0 :(得分: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;
     }];
}