2

我正在查看我的 iPhone 应用程序中的一些动画,感觉有点难看。然后我明白了:它只是不通过亚像素状态进行动画处理。

所以,如果我使用通常的 +beginAnimations/+commitAnimations,移动一些只有几个像素的东西看起来“跳跃”。我怎样才能避免它?是否有任何标志可以通过浮动坐标或其他方式使其动画?

只是为了让您了解我拥有什么以及我在寻找什么,请参考图片:

替代文字 http://www.ptoing.net/subpixel_aa.gif

提前致谢, 安东

4

3 回答 3

7

这很有趣,但我发现 UIImageView使用抗锯齿对其内容进行动画处理,而视图的边缘没有抗锯齿(硬)。这似乎是因为 UIView 本身应该保持相同的边界,而亚像素渲染可能会增加一点边界。

所以,我最终只是在图片周围放置了一个带有一些透明空间的图像,一切都很顺利。

只是不要让 UIView 为你剪切它的内容:)

于 2009-10-15T08:26:55.607 回答
1

您可以尝试从自定义 UIView 派生您正在制作动画的项目,该 UIView 会覆盖其drawRect方法并为其设置抗锯齿,然后让父级绘制到其中。类似于以下内容:

- (void) drawRect:(CGRect)area
{
  CGContextRef context = UIGraphicsGetCurrentContext();
  CGContextSaveGState(context);
  CGContextSetShouldAntialias(context, true);
  CGContextSetAllowsAntialiasing(context, true);
  [super drawRect:area];
  // We have to turn it back off since it's not saved in graphic state.
  CGContextSetAllowsAntialiasing(context, false);
  CGContextRestoreGState(context);
}

另一方面,当您到达这里时,渲染管道可能为时已晚,因此您可能不得不最终推出自己的动画方案,让您可以完全控制像素定位。

于 2009-10-14T19:44:31.970 回答
0

根据 Jeeva 上面的评论,您可以通过将 info.plist 中的以下选项设置为 YES 来使 UIView 边缘呈现抗锯齿。

Renders with edge antialiasing

这是 Jeeva 指向的链接:

http://www.techpaa.com/2012/06/avoiding-view-edge-antialiasing.html

于 2013-04-02T19:12:08.433 回答