iPhone - 将视角应用于CALayer时的锯齿状边缘

Bri*_*ian 6 iphone core-animation core-graphics calayer uikit

我有一个CALayer,我应用透视图来使用a CGTransform3D并指定m14属性.应用透视时,图层具有锯齿状边缘.我听说有人提到在图层周围添加1px透明边框会有助于此.我不知道该怎么做.我已经尝试使用CALayer 的borderborderWidth属性,但锯齿状的边缘仍然存在.我也尝试减少所有方面1px绘制的矩形,但它也没有帮助.

任何帮助都会很棒!谢谢!

jla*_*z18 11

我发现这个问题的最佳解决方案是将shouldRasterize设置为YES并将光栅化比例设置为设备屏幕的比例.

myLayer.shouldRasterize = YES;
myLayer.rasterizationScale = UIScreen.mainScreen().scale // iOS
myLayer.rasterizationScale = NSScreen.mainScreen()!.backingScaleFactor // OSX
Run Code Online (Sandbox Code Playgroud)

这将为您平滑边缘.


Bra*_*son 3

我认为“我听到人们提到”是指对这个问题的讨论。建议使用以下代码在 CALayer 中实际绘制内容,使其在核心内容之外有一个一像素的透明边框

CGContextSetAllowsAntialiasing(theContext, true);
CGContextSetShouldAntialias(theContext, true);
Run Code Online (Sandbox Code Playgroud)

在该层的石英绘图中。

CALayer 上也有该edgeAntialiasingMask属性,但我在使用如下代码时没有看到任何影响:

layer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge;
Run Code Online (Sandbox Code Playgroud)

关于变换层边缘的抗锯齿。另请参阅此问题以了解对此的讨论,以及他们如何使用图像周围的单像素透明边框解决问题。