使用推送动画查看交换

时间:2009-11-10 15:03:34

标签: objective-c cocoa core-animation nsviewanimation

我想通过将旧视图推到一个新视图(kCATransitionPush类型)中来换出一个视图与另一个视图。要使用CoreAnimation,我需要使用我的观点与CALayers合作。问题是通过setWantsLayer将支持层附加到我的窗口内容视图会扭曲视图中的所有内容。

我不确定这是否与我正在使用NSWindow的子类MAAttachedWindow(http://mattgemmell.com/source)有关,这是一个HUD风格的透明弹出窗口,附加到另一个屏幕上的元素。

如果需要,我可以提供此失真的屏幕截图。我让动画通过NSViewAnimation工作,但正如许多其他人所经历的那样,NSViewAnimation非常慢。我宁愿使用CoreAnimation但这个问题阻止我使用它。

非常感谢任何见解

3 个答案:

答案 0 :(得分:1)

除了非整数坐标的可能性之外,对我来说,文本似乎已被绘制到非不透明缓冲区中。如果在非不透明背景颜色上绘制并且然后合成,则支持LCD的Quartz文本抗锯齿不起作用。相反,您的图层/视图必须用不透明的背景颜色填充背景,然后在其上方绘制文本。

我们玩过的一个解决方法是:

  • 画出半透明的背景。
  • 使用背景颜色绘制文本,alpha = 1,为相同颜色的文本添加笔划,选择笔触宽度以包含抗锯齿区域(请注意此处的分辨率独立性)。
  • 在“登陆垫”上方正常绘制文字。

滚动条的问题可能是滚动条声称-isOpaque但不是。适当的不透明度和背景颜色渲染应该有所帮助。

答案 1 :(得分:0)

鉴于你的说法,普通的窗户不会出现问题,是时候鹰眼MAAttachedWindow了。在此代码中创建窗口时我看到的第一件事是:

[self useOptimizedDrawing:YES];

如果你评论该行,会发生什么?接下来要看的是绘图代码。此外,-_redisplay方法会在发生此情况时禁用/重新启用屏幕更新,更新几何图形和背景。所有这些都会让我怀疑它与图层支持的视图和动画的交互。

答案 2 :(得分:0)

观察失真的增加使我认为你的一个或多个观点的边界或框架不是不可或缺的。