对于自定义 segue 动画,如何告诉视图控制器它已动画化



这是我自定义的 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:并将您自己的标志添加到视图控制器中,以便您可以控制它是否是自定义动画。

最新更新