我正在尝试使用自定义 segue 在 UIViewControllers 之间添加一个简单的推送动画。
(没有将我的控制器转换为使用 UINavigationController)
到目前为止找到的答案适用于导航控制器,但在不使用导航控制器时会失败。(我仍在阅读并尝试在堆栈溢出中看到的其他答案)
我的自定义 segue .m 感谢 (ZHCustomSegue.m) Zakir 于 2012 年 7 月 5 日
#import "SFCustomSegue.h"
#import "QuartzCore/QuartzCore.h"
@implementation SFCustomSegue
-(void)perform {
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];
CATransition* transition = [CATransition animation];
transition.duration = 4.0;
transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;
[sourceViewController.view.layer addAnimation:transition forKey:kCATransition];
[sourceViewController presentViewController:[self destinationViewController] animated:NO completion:nil];
}
如果我按照 Zakir 的原始示例使用导航控制器并将最后两行替换为:
[sourceViewController.navigationController.view.layer addAnimation:transition
forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
有用....
Apple的文档说(注意不是导航控制器,而是使用模态segue):
- (void)perform
{
// Add your own animation code here.
[[self sourceViewController] presentModalViewController:[self destinationViewController] animated:NO];
}
通过不工作,我没有动画。在 Zakir 的代码中,使用 4.0 秒需要 4.0 秒,我得到了我想要的动画。当然,如果我使用导航控制器,推送转换是默认设置。在这段代码中,我没有动画,它需要 0 秒。
有没有人使用 UIViewControllers 获得自定义 segue 动画?