【发布时间】:2014-03-22 22:50:29
【问题描述】:
我的应用在NSImageView 上绘制支持图层的标签。
图像视图显示图像,并在该图像上显示色调。
这可确保标签和背景图像之间的对比度有效。
如您所见,亚像素抗锯齿已启用且工作正常。
当您将鼠标悬停在这些标签上时,它们会为 frame 属性(实际上是包含它们的视图)设置动画。
制作动画时,子像素抗锯齿被禁用,完成后再次启用。
这看起来非常奇怪。
图层永远不会重绘,子像素抗锯齿也不必改变。
所以我看不出在动画时不应该显示它的充分理由。
我已经尝试了所有我能想到的。
- 使
NSTextField不透明 - 使
CATextLayer不透明 - 为
NSTextField提供背景色 - 给
CATextLayer一个背景色
总是一样的结果。
为标签禁用亚像素抗锯齿不是一种选择,因为它在非视网膜设备上的可读性不好。
编辑
我忘记了在制作动画时图层被替换为presentationLayer。
该层可能不支持亚像素抗锯齿,这就是它被禁用的原因。
现在的问题是我是否可以将这个presentationLayer 替换为CATextLayer。
我还注意到,将shouldRasterize 设置为YES 也为动画启用了亚像素抗锯齿,但仅针对背景颜色。所以没有背景色不会带来亚像素抗锯齿。
【问题讨论】:
-
这可能什么都不做,但是您是否尝试过在标准 NSView 而不是 NSImageView 上进行文本绘制。几个月前我需要对图像进行注释,最后使用了普通的 NSView,因为我在使用图像视图时遇到了一些奇怪的问题。
-
@boyfarrell 不,刚刚试过。没有效果。
-
也许您可以从文本图层中获取像素并对其进行动画处理(以 1 个像素为增量?)子像素 AA 实际上取决于图层后面的内容,因此即使您将其设置为工作它可能看起来不正确。
-
@nielsbot 这是一个选项,是的。我得试一试,看看效果如何。
-
你在做什么?!? :) 我曾经为 Pioneer 工作过,你的图片包含我姓氏的前三个字母和他们的名字。非常可疑。 :)
标签: objective-c macos cocoa core-animation