如何在iPhoneOS中设置防别名层

如何在iPhoneOS中设置防别名层,iphone,core-animation,Iphone,Core Animation,我们已经把雷纳·奈齐亚的钱拿出来好几个月了。它是 做得很好,所以我们一直在时间允许的情况下更新它。 然而,有一件事一直困扰着我。我一直没能拿到我的护照 分层卡可以正确地防止别名 以下是一个示例: 直放的牌是非常干净的,但是当它们 使卡片周围的黑线呈锯齿状。我试过这个 取决于艺术品中隐含的线条和绘制的线条 通过drawRect:,它们都做相同的事情。我已经试过了 edgeAntiAliasingMask,据我所知,它一点作用也没有。 我尝试过将子层设置为“否”和“是”的masksToBounds

我们已经把雷纳·奈齐亚的钱拿出来好几个月了。它是 做得很好,所以我们一直在时间允许的情况下更新它。 然而,有一件事一直困扰着我。我一直没能拿到我的护照 分层卡可以正确地防止别名

以下是一个示例:

直放的牌是非常干净的,但是当它们 使卡片周围的黑线呈锯齿状。我试过这个 取决于艺术品中隐含的线条和绘制的线条 通过drawRect:,它们都做相同的事情。我已经试过了 edgeAntiAliasingMask,据我所知,它一点作用也没有。 我尝试过将子层设置为“否”和“是”的masksToBounds

现在,我的卡被设置为一个CALayer,其中有子CALayer用于 正面和背面,还有一些其他的东西,比如一个发光面具 还有一个变黑的面具。下面是一些代码片段:

   CArdLayer *theCardLayer = [CArdLayer layer];
   theCardLayer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;

   theCardLayer.front = [CALayer layer];
   theCardLayer.front.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
   theCardLayer.front.bounds = theCardLayer.bounds;
   theCardLayer.front.masksToBounds = YES;
   theCardLayer.front.contents = (id)[cardDrawing CGImage];

   [theCardLayer addSublayer:theCardLayer.front];
等等


有没有关于如何使卡片实际抗锯齿的想法?

我从未使用过框架,但看起来抗锯齿只在卡片的内侧有效,而不是在外侧(假设非旋转卡片上的圆角是一种特殊情况)

所以我认为这实际上是一个卡片和背景的组合问题

快速查看提供了一些提示(仅限于假设,请尝试):

确保
不透明
属性为false(可能您看到的是渲染代码优化的结果)

如果将“不透明度”设置为“近似不透明”(可能为0.9?),请检查其外观


检查
掩码
属性。它应该可以让你创建一个像阿尔法通道一样的遮罩,有柔软的边框-尽管我知道这不是你真正想要的…

我能想到的最好结果是按照我在评论中的建议:我将每个(透明)图形的每一面都增加了1个像素。有了这一点点的空白,这些卡片与背景的组合就更好了

因此,这并不完全是一个iPhone代码答案,而是一个在iPhone上仍然有效的答案

这里有一个“后”镜头,你可以将其与上面的“前”镜头进行比较:

如果您不想启动photoshop,这里有一种方法可以通过编程实现:

特别是UIImage+Alpha.h/.m中的-transparentOrderImage:category方法

希望这能帮助其他人


谢谢

这具有添加透明边框的效果:

layer.cornerRadius = 1.01;

谢谢你的回复。“不透明”或“不透明度”属性都没有任何区别。然而,我明白了你的说法,即抗锯齿只在卡的内侧起作用。因此,我尝试将我的一张卡的每一面扩展一个(透明)像素。结果是笔划(目前在实际卡片图形中)更加柔和。所以,这看起来像一个解决方案,但使每个图形比需要的大2x2像素似乎很难,所以在我这么做之前,有人有什么想法吗?嗨,香农,你是如何将笔划每边扩展一个透明像素的?你能分享一下代码片段吗?谢谢,Photoshop。我在那里打开了每个文件,并将画布大小在两个方向上扩展了2个像素。这个问题类似:(问题涉及UIImageView,但建议的修复适用于所有CoreAnimation层)。