对于自定义 segue 动画,如何告诉 ViewController 它是动画的?
Posted
技术标签:
【中文标题】对于自定义 segue 动画,如何告诉 ViewController 它是动画的?【英文标题】:For custom segue animation, how to tell the ViewController that it was animated? 【发布时间】: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
方法?
【问题讨论】:
【参考方案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
...
是的,如果没有其他解决方案,我会这样做。以上是关于对于自定义 segue 动画,如何告诉 ViewController 它是动画的?的主要内容,如果未能解决你的问题,请参考以下文章