我正在为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];
如何在没有褪色的情况下进行推动动画?
答案 0 :(得分:5)
我发现无论视图是否支持CA,我都能找到顺畅的Core Animation转换的最佳方法是执行以下操作:
NSView -cacheDisplayInRect:toBitmapImageRep
或类似方法创建您要设置动画的视图的图像答案 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];