对于自定义segue动画,如何告诉ViewController它是动画的?

时间:2014-01-02 15:42:19

标签: ios objective-c animation uiviewcontroller 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];
}];

请注意,在上面的代码中,我NO animated传递了presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion,因为我使用的是自定义动画,并且不想使用任何标准动画。

我的目标视图控制器的方法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方法?

1 个答案:

答案 0 :(得分:0)

在调用NO

时,检查的一种可能性是将super传递给[super viewWillAppear:]
- (void)viewWillAppear:(BOOL)animated {

    [super viewWillAppear:NO];
    //-- your own animation here
}

因此您可以将YES传递给presentViewController:,但在将其传递给super时会覆盖它。

如果这不起作用,我打赌你唯一的机会就是将NO传递给presentViewController:并将自己的旗帜添加到视图控制器中,这样你就可以控制它是否是自定义动画。