iPhone:CALayer +旋转3D +抗锯齿?

时间:2010-04-21 19:38:15

标签: iphone 3d calayer antialiasing

iPhone SDK问题:我正在屏幕上绘制UIImageView。我已经用3D旋转并提供了一些透视图,因此图像看起来像是以一定角度指向屏幕。一切正常。现在问题是结果图像的边缘似乎根本没有抗锯齿。有人知道怎么做吗?

基本上,我正在使用石英三维变换实现我自己的CoverFlow版本(是的,设计专利等等)。它工作正常,除了每个封面都没有抗锯齿,而苹果版本是。

我已经尝试过使用CALayer的edgeAntialisingMask,但这没有帮助 - 默认是每个边缘应该是抗锯齿的......

谢谢!

5 个答案:

答案 0 :(得分:19)

如果只旋转一个图像,则只有一个技巧可以解决问题。尝试设置

layer.shadowOpacity = 0.01;

在3D旋转后,图片看起来会更平滑

答案 1 :(得分:7)

Gloomcore的回答给出了非常好的结果。

然而,这有时让事情真的很糟糕! 添加光栅化有点帮助:

.layer.shadowOpacity = 0.01;
.layer.shouldRasterize = YES;

我知道问题/答案是陈旧的,但是我发现了它。

答案 2 :(得分:2)

您可以尝试在图像边缘周围添加一些透明像素,方法是将UIImageView放在稍微大一点的空视图中,或者通过更改源图像。

答案 3 :(得分:0)

我有一个类似的问题只通过设置shouldRasterize = YES来解决,但是因为我重新使用了我的视图(和图层),所以shouldRasterize = YES杀死了性能。

幸运的是,我找到了一个解决方案,在适当的时候转动shouldRasterize = NO来恢复我应用程序中的性能。

我在这里发布了一个解决方案:Antialiasing edges of UIView after transformation using CALayer's transform

答案 4 :(得分:0)

你可以试试这个

方法:使用layer.shouldRasterize

  1. 创建一个superlayer / superview,它在所有4个方向上都大1个像素
  2. superlayer / superview
  3. 进行转换
  4. 在原始layer.shouldRasterize / layer
  5. 上启用view

    方法:绘制到UIImage

    • 将您的内容绘制为UIImage
    • 确保内容周围有1个像素的透明边框
    • 显示图片

    参考:http://darknoon.com/2012/05/18/the-transparent-border-trick/