目标C语言 转换推无退色



我正在为Mac OS x创建一个导航控制器类。

我想用kCATransitionPush动画代替当前视图。
就像在这篇文章中:
核心动画教程-带过渡的向导对话框

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];

我如何做一个推动画没有褪色?

无论视图是否支持CA,我发现获得平滑的核心动画过渡的最佳方法是做以下事情:

  1. 使用NSView -cacheDisplayInRect:toBitmapImageRep或类似的方法创建您正在尝试动画的视图的图像
  2. 将该图像放入NSImageView
  3. 图层后置图像视图,当图层后置时将画得很好,没有故障
  4. 将图像视图添加为视图的子视图
  5. 使用NSView的动画代理使图像视图帧动画化
  6. 动画完成后移除图像视图

我怀疑你遇到了隐式动画-核心动画将自动动画层属性的变化发生在你自己的事务之外。

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

如何禁用CALayer隐式动画?

禁用隐式动画-[CALayer setNeedsDisplayInRect:]

…你可以在Core Animation文档

中阅读更多关于隐式事务的信息。

我认为左过渡包含一个内置的渐变。IOS的推送转场可以。

如果你不想这样,你可能不得不使用Core Animation来滚动你自己的push transition。这在iOS的UIView动画中很容易做到。遗憾的是,在Mac OS中没有相应的功能。我希望苹果能回到过去,在Mac OS中添加视图动画。我在iOS中使用它们时被宠坏了,然后当我在Mac应用程序上工作时就会想念它们。

添加下面的代码

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

相关内容

  • 没有找到相关文章

最新更新