2

我想通过将旧视图推到一边以滑入新视图(kCATransitionPush 类型)来交换一个视图。要使用 CoreAnimation,我需要在我的视图中使用 CALayers。问题是通过 setWantsLayer 将支持层附加到我的窗口内容视图会扭曲视图中的所有内容。

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

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

非常感谢任何见解

4

3 回答 3

1

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

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

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

滚动条的问题可能是滚动条声称 -isOpaque 但事实并非如此。适当调整不透明度和背景颜色渲染应该会有所帮助。

于 2009-11-26T18:30:55.077 回答
0

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

[self useOptimizedDrawing:YES];

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

于 2009-11-10T23:48:37.123 回答
0

看看失真是如何增加的,我认为您的一个或多个视图的边界或框架不是完整的。

于 2009-11-11T15:04:05.453 回答