用于 segue 动画的 CATransition(iOS 7 之前的样式)

Posted

技术标签:

【中文标题】用于 segue 动画的 CATransition(iOS 7 之前的样式)【英文标题】:CATransition for segue animation (pre iOS 7 style) 【发布时间】:2013-09-30 11:59:29 【问题描述】:

我有一个自定义的 segue,试图复制 pre ios 7 风格的 push/pop segues:

viewControllers 并排动画,没有变暗。(真的有那么难吗!)

以下代码有效,除了:

退出时页面变暗 进入页面在进入时是暗的(移动到位后逐渐变正常)

这些图片说明了问题:

然后...

有没有办法阻止这种变暗效果?如果能得到一些帮助,我将不胜感激。

-(void)perform

    UIViewController *source = self.sourceViewController;
    UIWindow *window = source.view.window;

    CATransition *transition = [CATransition animation];
    [transition setDuration:2.0];
    [transition setDelegate:self];
    [transition setTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionLinear]];
    [transition setType:@"push"];
    [transition setSubtype:kCATransitionFromRight];

    [window.layer addAnimation:transition forKey:kCATransition];
    [window setRootViewController:self.destinationViewController];

【问题讨论】:

我已经使用动画 viewController 视图来创建我的 segue(不那么整洁),而不是使用 CATransition。但是,我会保留这个问题,以防它对其他人有所帮助。 你得到解决了吗? 不幸的是,我没有找到一个超级简单的解决方案。我不得不求助于动画 viewController 视图。 (如果 Apple 能够创建一个选项来移除这种不必要的阴影,那就太好了。) 【参考方案1】:

这两个函数对我来说很好用,虽然代码和你的很相似,但希望对你有帮助。

+(void) modalRight:(UIViewController*)vc destvc:(UIViewController*)viewCtrl
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromRight;
    [vc.view.window.layer addAnimation:transition forKey:nil];
    [vc presentModalViewController:viewCtrl animated:NO];


+(void) modalLeft:(UIViewController*)vc
    CATransition *transition = [CATransition animation];
    transition.duration = 0.3;
    transition.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    transition.type = kCATransitionPush;
    transition.subtype = kCATransitionFromLeft;
    [vc.view.window.layer addAnimation:transition forKey:nil];
    [vc dismissModalViewControllerAnimated:NO];

【讨论】:

这与我使用的非常相似,但不幸的是,在 iOS 7 中,视图控制器在进入/退出时变暗了。这很烦人。

以上是关于用于 segue 动画的 CATransition(iOS 7 之前的样式)的主要内容,如果未能解决你的问题,请参考以下文章

CATransition(转场动画)

CATransition:视图替换动画:子视图的增删查改

CATransition-转场动画

没有segue的自定义关闭过渡

CATransition转场动画

iOS CoreAnimation 转场动画 CATransition