CATransition推动不褪色

时间:2013-01-12 13:17:21

标签: objective-c macos cocoa core-animation

我正在为Mac OS X制作导航控制器类。

我想用kCATransitionPush动画替换当前视图 就像这篇文章:
Core Animation Tutorial - Wizard Dialog With Transitions

CATransition设置如下:

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.view setAnimations:@{ @"subviews" : transition }];

然而,当我替换视图时,会有一个淡入淡出的动画,它会被自动添加。

[NSAnimationContext beginGrouping];
{
    [[self.view animator] replaceSubview:_currentViewController.view with:newViewController.view];
}
[NSAnimationContext endGrouping];

如何在没有褪色的情况下进行推动动画?

4 个答案:

答案 0 :(得分:5)

我发现无论视图是否支持CA,我都能找到顺畅的Core Animation转换的最佳方法是执行以下操作:

  1. 使用NSView -cacheDisplayInRect:toBitmapImageRep或类似方法创建您要设置动画的视图的图像
  2. 将该图像放入NSImageView
  3. 图层视图的图层视图,在图层支持
  4. 时可以很好地绘制而不会出现毛刺
  5. 将图片视图作为子视图添加到您要转换的视图
  6. 使用NSView的动画代理
  7. 为图像视图框设置动画
  8. 动画完成后删除图像视图

答案 1 :(得分:1)

我怀疑你正在遇到隐式动画 - 核心动画会自动动画在你自己的交易之外发生的图层属性变化。

在这两个问题中有几种禁用这些隐式动画的方法有很好的总结:

How to disable CALayer implicit animations?

Disabling implicit animations in -[CALayer setNeedsDisplayInRect:]

...您可以阅读有关隐式交易的更多信息in the Core Animation docs

答案 2 :(得分:1)

我认为从左转换过渡包括内置淡入淡出。 IOS推送转换。

如果您不想要,则可能需要使用Core Animation来推送自己的推送过渡。在使用UIView动画的iOS中,这很容易。可悲的是,在Mac OS中没有相同的功能。我希望Apple能够回归并向Mac OS添加视图动画。我在iOS中使用它们被宠坏了,然后在我使用Mac应用程序时想念它们。

答案 3 :(得分:0)

添加以下代码

        CATransition *transition = [CATransition animation];
        transition.type = kCATransitionPush;
        transition.subtype = kCATransitionFromLeft;
        [transition setDuration:0.5];
        [self.view.layer addAnimation:transition forKey:kCATransition];