7

iPhone SDK 问题:我正在屏幕上绘制 UIImageView。我已将其以 3D 形式旋转并提供了一些透视效果,因此图像看起来像是以一定角度指向屏幕。这一切都很好。现在的问题是生成的图片的边缘似乎根本没有抗锯齿。有谁知道如何做到这一点?

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

我试过弄乱 CALayer 的 edgeAntialisingMask,但这并没有帮助 - 默认情况下每个边缘都应该是抗锯齿的......

谢谢!

4

5 回答 5

19

如果您只旋转一张图像,那么一个技巧就可以解决问题。尝试设置

layer.shadowOpacity = 0.01;

3D Rotation 之后图片看起来会更平滑

于 2011-04-19T13:02:10.217 回答
7

Gloomcore 的答案给出了一个非常简洁的结果。

然而这有时会让事情变得非常迟钝!添加光栅化有点帮助:

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

我知道问题/答案是旧的,但嘿,我刚刚找到它。

于 2012-07-12T10:47:20.393 回答
2

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

于 2010-04-21T21:14:18.440 回答
0

我有一个类似的问题,仅通过设置 shouldRasterize = YES 即可解决,但是因为我正在重新使用我的视图(和图层),所以 shouldRasterize = YES 会破坏性能。

幸运的是,我找到了一个解决方案,通过在正确的时间打开 shouldRasterize = NO 来恢复我的应用程序的性能。

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

于 2013-05-01T04:57:11.430 回答
0

你可以试试这个

方法:使用layer.shouldRasterize

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

方法:绘制到UIImage

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

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

于 2014-08-20T16:17:55.650 回答