2014-10-29 74 views
4

尝试游戏新的旋转方法,我需要知道设备是否正在旋转,以便推迟和取消旋转时不需要的操作。viewWillTransitionToSize协调器忽略块

-(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。因此,我的完成块似乎从未被调用过。

+0

为什么不使用-animateAlongsideTransition:completion:? – Dex 2014-11-01 05:53:32

回答

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; 
    }]; 
} 
+0

这对我没有意义,发送零。现在你解释一下,非常有意义。仍然感觉像一个黑客工作,但工作。 – 2015-01-28 14:01:04