我在我的iPhone应用程序中查看了一些动画,感觉它有点难看。然后我继续说道:它只是没有动画通过亚像素状态。
所以,如果我使用通常的+ beginAnimations / + commitAnimations,移动一些东西只是几个像素看起来“跳跃”。我怎么能避免呢?是否有任何标志可以通过浮动坐标或其他任何东西制作动画?
只是为了让您知道我拥有什么以及我在寻找什么,请参考图片:
alt text http://www.ptoing.net/subpixel_aa.gif
提前致谢, 安东
答案 0 :(得分:7)
这很有趣,但我发现UIImageView使用 aniti-aliasing为其内容设置动画,而视图的边缘不会消除锯齿(硬)。这似乎是因为UIView本身应该保持相同的边界,而子像素渲染可能会添加到边界。
所以,我最后只是在图片周围放置一个带有透明空间的图像,一切顺利。
不要让UIView为你剪掉它的内容:)
答案 1 :(得分:1)
您可以尝试从覆盖其drawRect
方法的自定义UIView派生您正在设置动画的项目,并为其设置消除锯齿,然后让父绘制到其中。有点像:
- (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);
}
另一方面,到达此处时渲染管道可能为时已晚,因此您可能必须最终滚动自己的动画方案,以便完全控制像素定位。
答案 2 :(得分:0)
Per Jeeva上面的评论,你可以通过将info.plist中的以下选项设置为YES,使用抗锯齿渲染UIView边缘。
Renders with edge antialiasing
以下是Jeeva指出的链接:
http://www.techpaa.com/2012/06/avoiding-view-edge-antialiasing.html