CATransition推动不褪色

NSA*_*ict 8 macos cocoa core-animation objective-c

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

我想用kCATransitionPush动画替换当前视图.
喜欢这篇文章:
核心动画教程 - 带转换的向导对话框

CATransition设置是这样的:

CATransition *transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromLeft;
[self.view setAnimations:@{ @"subviews" : transition }];
Run Code Online (Sandbox Code Playgroud)

但是,当我替换视图时,会有一个淡入淡出的动画,它会被自动添加.

[NSAnimationContext beginGrouping];
{
    [[self.view animator] replaceSubview:_currentViewController.view with:newViewController.view];
}
[NSAnimationContext endGrouping];
Run Code Online (Sandbox Code Playgroud)

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

ind*_*gie 5

无论视图是否支持CA,我发现获得平滑Core Animation转换的最佳方法是执行以下操作:

  1. 使用NSView -cacheDisplayInRect:toBitmapImageRep或类似方法创建要尝试动画的视图的图像
  2. 将该图像放在NSImageView中
  3. 对图像视图进行图层化处理,在图层支持时可以精确绘制而不会出现毛刺
  4. 添加图像视图作为一个子视图您正在试图转型的观点
  5. 使用NSView的动画代理为图像视图框架设置动画
  6. 动画完成后删除图像视图