【问题标题】:For custom segue animation, how to tell the ViewController that it was animated?对于自定义 segue 动画,如何告诉 ViewController 它是动画的?
【发布时间】:2014-01-02 15:42:18
【问题描述】:

这是我的自定义转场动画的代码:

[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 中为animated 传递了NO,因为我正在使用我的自定义动画并且不想使用任何标准动画。

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

【问题讨论】:

    标签: ios objective-c animation uiviewcontroller segue


    【解决方案1】:

    一种检查方法是在调用[super viewWillAppear:] 时将NO 传递给super

    - (void)viewWillAppear:(BOOL)animated {
    
        [super viewWillAppear:NO];
        //-- your own animation here
    }
    

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

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

    【讨论】:

    • 将 NO 传递给 VC 的超类不会关闭内置标准动画。动画发生在 viewWillAppear: 被调用之前。
    • 很有趣,谢谢。那么我看到的唯一方法是使用您自己的标志,这样您就可以始终将NO 传递给presentViewController...
    • 是的,如果没有其他解决方案,我会这样做。
    猜你喜欢
    • 2012-06-02
    • 2013-10-15
    • 1970-01-01
    • 2019-12-29
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多