7

我注意到,当使用 IB 将 PNG 图像放置到视图中和/或将这些图像动画到视图周围的不同位置时,图像有时会变得轻微模糊。

在大多数情况下,我可以通过在图像位置添加 0.5 个像素来弥补模糊。

[lbLiteButton.layer setPosition:CGPointMake(140.5,159.5)];

有时我必须像上面一样调整 x 和 y。有时我只需要调整 xy。

我记得在某处读到这与图像的大小以及核心动画的工作原理以及半像素有关……但我在任何地方都找不到这篇文章!?

“.5 像素”解决方案的问题在于,每个 PNG 图像的大小都不同,因此您不能重用自定义动画,因为您必须为每个不同的图像自定义动画。

  1. 有没有办法确保无论我在哪里放置或动画图像,我都不会得到任何模糊的位置?
  2. 有人有这方面的信息吗?

谢谢你!

4

3 回答 3

14

视图层的属性position基于其anchorPoint属性。默认情况下,即 (0.5, 0.5),表示图层的锚点位于其中心。如果您的视图(及其图层)的像素宽度或高度为奇数,则为位置设置整数值将导致视图的原点不是整数,从而导致您看到的模糊。

要解决此问题,您可以通过获取所需的视图中心位置,减去视图宽度的一半,将该值四舍五入,然后添加视图宽度的一半,并重复高度来计算出您的位置的积分版本。您还可以anchorPoint将视图图层的 设置为 (0,0) 并根据其原点定位视图。

这也可能与超级视图的错位有关。要对此进行诊断,您可以使用 Instruments 中的 Core Animation 工具,然后选择 Color Misaligned Images 选项。它应该为应用程序中非像素对齐的任何视图或图层着色。

于 2010-01-31T02:16:56.610 回答
2

我对标签中的模糊文本有类似的体验,这是由我的标签的超级视图具有亚像素偏移引起的。因此,即使该视图中的位置是完整的,当调整到其父坐标时,它也会有半个像素左右的偏移,从而导致模糊。

但是,如果您只是有时会收到此信息,则可能并非如此。你的superview是在四处移动,还是在奇怪的位置?我想说最好的办法是弄清楚发生这种情况的确切情况。

于 2010-01-31T02:05:38.080 回答
1

IB 有一个错误,有时(不经常)只是移动元素会使它们变得模糊 - 你最常在 UILabels 和 UIImageViews 中看到它(尽管这可能是最明显的)。我确信它在某种程度上与上面提到的点有关,但解决方法通常是将元素的位置 (x,y) 坐标设置为 0,0,然后返回到原始值。这通常可以解决问题(同样,这是在 IB 中)。

于 2010-01-31T04:16:51.763 回答