我们已经将 Reiner Knizia的钱推出了几个月了。它的 做得很好,所以我们一直在更新它,因为时间允许。 然而,有一件事继续让我烦恼。我从来没有能够得到我的 分层卡正确地防止别名。
以下是一个示例:
直线放置的卡非常干净,但无论何时都是 角度卡片周围的黑线变得锯齿状。我试过这个 取决于艺术作品和绘制的线条隐含的两条线 通过drawRect:,他们都做同样的事情。我试过了 edgeAntiAliasingMask,据我所知,它没有做任何事情。 我已经为子层设置为NO和YES尝试了maskToBounds。
现在我的卡被设置为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];
等...
关于如何使卡片真正消除别名的任何想法?
答案 0 :(得分:4)
这具有添加透明边框的效果:
layer.cornerRadius = 1.01;
答案 1 :(得分:3)
我能想出的最好结果就是按照我在评论中提出的建议:我将每个(透明)图形逐渐增加1个像素。凭借这一点点的余量,这些卡片在后台合成得更好。
所以,不完全是一个iPhone代码答案,但仍然可以在iPhone上运行。
这是一个“后”镜头,你可以比较上面的“之前”:
答案 2 :(得分:1)
我从未使用过该框架,但看起来抗锯齿只能在卡的内侧工作,而不是在外侧(假设非旋转卡上的圆角是特殊情况)。
所以恕我直言,它实际上是卡片和背景的构图问题。
the docs的快速浏览提供了一些提示(只有假设,尝试一下):
确保Opaque
属性为false(可能您看到的是优化渲染代码的结果)。
如果将“不透明度”设置为“近乎不透明”(可能为0.9?),请检查它的外观。
检查Mask
属性。它应该允许你创建一个像alpha通道一样的面具,带有柔和的边框 - 虽然我知道它不是你想要的......
答案 3 :(得分:1)
如果您不想启动photoshop,可以通过编程方式执行以下操作:
http://vocaro.com/trevor/blog/2009/10/12/resize-a-uiimage-the-right-way/
特别是UIImage + Alpha.h / .m中的-transparentBorderImage:category方法。
希望这有助于其他人。