为什么PNG图像有时会变得模糊,具体取决于它在视图中的位置

时间:2010-01-31 01:16:10

标签: iphone png core-animation blur

我注意到,当使用IB将PNG图像放入视图和/或将这些图像设置为视图周围的不同位置时,图像有时会出现轻微模糊。

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

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

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

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

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

  1. 有没有办法确保无论我在哪里放置或动画我的图像,我都不会得到任何模糊的位置?
  2. 有没有人对此有任何了解?
  3. 谢谢!

3 个答案:

答案 0 :(得分:14)

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

要解决这个问题,您可以通过获取视图的所需中心位置,减去视图宽度的一半,舍入该值,然后添加视图宽度的一半,并重复高度。您还可以将视图图层的anchorPoint设置为(0,0),并根据视图的原点定位视图。

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

答案 1 :(得分:2)

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

如果你有时只是这样,那可能并非如此。你的超级视图是在移动,还是奇怪地定位?我要说最好的办法是找出发生这种情况的具体情况。

答案 2 :(得分:1)

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