这是我自定义的 segue 动画的代码:
[UIView animateWithDuration:.4 animations:^{
destinationViewController.view.frame = targetFrame;
buttonBarImageView.alpha = 0.0;
} completion:^(BOOL finished) {
[sourceViewController presentViewController:destinationViewController animated:NO completion:nil];
[buttonBarImageView removeFromSuperview];
}];
请注意,在上面的代码中,我在 presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
中传递了 NO
for animated
,因为我使用的是我的自定义动画,不想使用任何标准动画。
我的目标视图控制器的方法viewWillAppear:(BOOL)animated
现在应该根据动画标志而有所不同。在 VC 中,标志决定是否应播放其他自己的内部动画。存在各种目标 VC,它们具有不同的内部动画。它们是我上面讨论的自定义动画的补充。
但是,我不能将YES
传递给 VC,因为我必须将NO
传递给 presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion
,这会导致NO
传递给 VC。
如何防止presentViewController:...
运行动画,但仍YES
传递给 VC 的viewWillAppear:(BOOL)animated
方法?
检查的可能性是在调用[super viewWillAppear:]
时将NO
传递给super
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:NO];
//-- your own animation here
}
所以你可以YES
传递给presentViewController:
,但是在传递给super
时会覆盖它。
如果这不起作用,我敢打赌,您唯一的机会是将NO
传递给presentViewController:
并将您自己的标志添加到视图控制器中,以便您可以控制它是否是自定义动画。