【问题标题】:What is an "misaligned image" in terms of Core Animation in iPhone OS?就 iPhone OS 中的核心动画而言,什么是“未对齐的图像”?
【发布时间】:2010-10-28 15:24:50
【问题描述】:

仪器告诉核心动画存在“未对齐的图像”。这是什么意思?

更新:我在 Instruments.app > Core Animation 中看到了这一点。

【问题讨论】:

    标签: iphone cocoa-touch uikit core-animation instruments


    【解决方案1】:

    我很想了解更多关于您在哪里看到的信息,但我怀疑它指的是不是像素对齐的图像。 Quartz 允许您在分数像素处绘制(回想一下,CGPoint 采用 CGFloats,而不是 NSIntegers),但它更昂贵并且容易产生一些模糊。您不能真正在分数像素上绘图,因此 Quartz 必须进行抗锯齿才能将其拉下来。这需要时间,而且肯定会损害 Core Animation 的性能。

    Quartz 不会警告您正在绘制小数像素,而且它对文本特别不友好。因此,在您进行程序化布局时,您需要考虑这一点。

    【讨论】:

    • 是的,这就是未对齐图像的含义。
    • 感谢您的提示。事实上,我有框架原点坐标的浮点值。在用 floor() 包裹它们后,Insturment 中的消息消失了。但我无法识别任何性能改进。当 UIImageView 旋转时,仪器也会抱怨这一点。所以我认为这没什么太糟糕的;)
    • 发生任何缩放时都是如此 - 例如,如果图像视图的宽度或高度与源图像边界不匹配,或者当视图应用了仿射变换时。
    【解决方案2】:

    未对齐的视图会在绘制之前强制渲染器消除锯齿。

    在这种情况下,“未对齐”意味着请求的显示点不直接映射到屏幕像素(例如,它可能在两个像素之间),因此必须绘制到两个相邻像素并消除锯齿给人一种错觉,认为它是在它们“之间”绘制的。

    这几乎总是在计算视图的框架时发生(而不是在 Interface Builder 中指定),因为 CGRect 的 X 坐标、Y 坐标、宽度和高度是 CGFloat,因此允许使用小数值。

    例如,以 (200.5, 35.5) 为中心的 100.8 x 50.1 像素的框是一个有效的框架,操作系统将尝试以它可以管理的最佳方式呈现它。仅单个像素所需的额外插值和抗锯齿开销就足以严重损害旧硬件的性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      相关资源
      最近更新 更多