尝试游戏新的旋转方法,我需要知道设备是否正在旋转,以便推迟和取消旋转时不需要的动作。
-(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 :(得分: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;
}];
}