【问题标题】:CATransition push without fadeCATransition 无淡入淡出推送
【发布时间】:2013-01-12 13:17:21
【问题描述】:

我正在为 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];

如何做一个不褪色的推送动画?

【问题讨论】:

    标签: objective-c macos cocoa core-animation


    【解决方案1】:

    我发现,无论视图是否支持 CA,获得流畅的 Core Animation 过渡的最佳方法是执行以下操作:

    1. 使用NSView -cacheDisplayInRect:toBitmapImageRep 或类似方法为您尝试设置动画的视图创建图像
    2. 将该图像放入 NSImageView 中
    3. 将图像视图分层,在分层时可以很好地绘制而不会出现故障
    4. 将图像视图添加为子视图您尝试转换的视图
    5. 使用 NSView 的动画代理对图像视图框架进行动画处理
    6. 动画完成后移除图像视图

    【讨论】:

      【解决方案2】:

      我怀疑您遇到了隐式动画 - Core Animation 会自动为您自己的事务之外发生的图层属性更改设置动画。

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

      How to disable CALayer implicit animations?

      Disabling implicit animations in -[CALayer setNeedsDisplayInRect:]

      ...你可以阅读更多关于隐式事务in the Core Animation docs

      【讨论】:

      • 我不确定我是否明白你的意思。我用CATransition *transition = [CATransition animation]; [transition setValue:(id)kCFBooleanFalse forKey:kCATransitionFade]; 尝试过,但没有成功,没有错误消息,只是行为相同。
      【解决方案3】:

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

      如果您不希望这样,您可能必须使用 Core Animation 滚动您自己的推送过渡。这在带有 UIView 动画的 iOS 中很容易。可悲的是,Mac OS 中没有等价物。我希望 Apple 能够返回并在 Mac OS 中添加视图动画。我在 iOS 中使用它们时会被宠坏,然后在使用 Mac 应用程序时会想念它们。

      【讨论】:

        【解决方案4】:

        添加以下代码

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多