我注意到,当使用IB将PNG图像放入视图和/或将这些图像设置为视图周围的不同位置时,图像有时会出现轻微模糊。
在大多数情况下,我可以通过在图像位置添加.5像素来弥补模糊。
[lbLiteButton.layer setPosition:CGPointMake(140.5,159.5)];
有时我必须像上面那样调整x和y。有时我只需要调整x 或 y。
我记得在某处读到这与图像的大小以及核心动画的工作原理以及与半像素的关系有关...但我无法在任何地方找到这篇文章!?
“.5像素”解决方案的问题在于每个PNG图像的大小不同,因此您无法重复使用自定义动画,因为您必须为每个不同的图像自定义它。
谢谢!
答案 0 :(得分:14)
视图图层的position
属性基于其anchorPoint
属性。默认情况下,即(0.5,0.5),表示图层的锚点位于其中心。如果您的视图(及其图层)是奇数个像素宽或高,则为该位置设置一个整数值将导致视图的原点不整合,从而导致您看到的模糊。
要解决这个问题,您可以通过获取视图的所需中心位置,减去视图宽度的一半,舍入该值,然后添加视图宽度的一半,并重复高度。您还可以将视图图层的anchorPoint
设置为(0,0),并根据视图的原点定位视图。
这可能也与超级视图的错位有关。要诊断这一点,您可以使用Instruments中的Core Animation乐器,并选择Color Misaligned Images选项。它应该为应用程序中非像素对齐的任何视图或图层着色。
答案 1 :(得分:2)
我对标签中的文字模糊有类似的体验,这是由我的标签的超视图引起的,具有亚像素偏移。因此,即使该视图中的位置是积分的,当调整到其父坐标时,它也会有半个像素左右的偏移,从而导致模糊。
如果你有时只是这样,那可能并非如此。你的超级视图是在移动,还是奇怪地定位?我要说最好的办法是找出发生这种情况的具体情况。
答案 2 :(得分:1)