Objective c 如果视图控制器转换太快,应用程序将崩溃
我使用视图控制器包含在6个视图控制器之间进行转换。使用分段控件控制过渡。除非在上一次转换的动画完成之前按下分段控件上的按钮,否则这一切都可以正常工作。在这种情况下,应用程序会崩溃 '调用-[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]时,子视图控制器和必须具有公共父视图控制器' 代码是:Objective c 如果视图控制器转换太快,应用程序将崩溃,objective-c,ios5,uiviewcontroller,Objective C,Ios5,Uiviewcontroller,我使用视图控制器包含在6个视图控制器之间进行转换。使用分段控件控制过渡。除非在上一次转换的动画完成之前按下分段控件上的按钮,否则这一切都可以正常工作。在这种情况下,应用程序会崩溃 '调用-[UIViewController transitionFromViewController:toViewController:duration:options:animations:completion:]时,子视图控制器和必须具有公共父视图控制器' 代码是: [self transitionFromView
[self transitionFromViewController:currentVC
toViewController:newVC
duration:1.0
options:UIViewAnimationOptionTransitionFlipFromRight
animations:nil
completion:^(BOOL finished) {
[currentVC removeFromParentViewController];
[newVC didMoveToParentViewController:self];
currentVC = newVC;
}];
我应该禁用分段控件直到动画完成吗?或者它们是避免此问题的更好方法吗?您可以通过调用
[[UIApplication sharedApplication] beginIgnoringInteractionEvents];
[[UIApplication sharedApplication] endIgnoringInteractionEvents];
当动画分别开始和结束时。然后,该应用程序将忽略所有交互(触摸事件),直到动画完成,因此该片段在安全(动画完成)之前将永远不会收到事件
我认为这种方法也适用于一些内置容器控制器。但是,请注意动画持续时间。如果动画需要很长时间,可能看起来应用程序的响应不好,这会损害用户体验修复它。谢天谢地,仅仅禁用与分段控件本身的交互是不够的(
self.segmentedControl.userInteractionEnabled=NO;
)?这似乎对我的用例有效。@RobertAtkins,如果它足以满足您的需求,那么肯定有效。我的答案是防止崩溃的最极端的解决方案,但当然不是理想的解决方案(或掩盖问题代码的借口);-)