Ios 对视网膜屏幕上的CALayer的0.5点(1像素)边界进行抗锯齿处理时闪烁
环顾Stackoverflow,您可以找到一些代码,这些代码允许您对CALayers的边界进行反别名,类似于:Ios 对视网膜屏幕上的CALayer的0.5点(1像素)边界进行抗锯齿处理时闪烁,ios,iphone,core-animation,calayer,antialiasing,Ios,Iphone,Core Animation,Calayer,Antialiasing,环顾Stackoverflow,您可以找到一些代码,这些代码允许您对CALayers的边界进行反别名,类似于: layer.borderColor = [UIColor whiteColor].CGColor; CGFloat borderWidth = 1; layer.borderWidth = borderWidth; layer.allowsEdgeAntialiasing = YES; layer.edgeAntialiasingMask = kCALayerLeftEdge | kC
layer.borderColor = [UIColor whiteColor].CGColor;
CGFloat borderWidth = 1;
layer.borderWidth = borderWidth;
layer.allowsEdgeAntialiasing = YES;
layer.edgeAntialiasingMask = kCALayerLeftEdge | kCALayerRightEdge + kCALayerTopEdge | kCALayerBottomEdge;
layer.needsDisplayOnBoundsChange = NO;
layer.rasterizationScale = [UIScreen mainScreen].scale;
但是对于视网膜显示器来说,画一个像素宽的边框会更好。因此,我将边界更改为:
CGFloat borderWidth = 1 / [[UIScreen mainScreen] scale];
唯一的问题是,当用户滚动时,您可以看到边缘“闪烁”。它肯定比没有抗锯齿要好,但不像我希望的那样平滑。有人想出办法让图层不闪烁吗 我知道这不是最近的事,但也许ContentsCale会起作用。 在斯威夫特身上看到了整个事情
let layer = view.layer
layer.borderColor = UIColor.white.CGColor
let borderWidth = CGFloat(1.0)
layer.borderWidth = borderWidth
layer.allowsEdgeAntialiasing = true
layer.edgeAntialiasingMask = [.LayerBottomEdge, .LayerTopEdge, .LayerLeftEdge, .LayerRightEdge]
layer.needsDisplayOnBoundsChange = false
layer.rasterizationScale = UIScreen.mainScreen().scale
layer.contentsScale = UIScreen.mainScreen().scale