[英]Flicker when antialiasing a 0.5 point (1 pixel) border of a CALayer on retina screens
环顾Stackoverflow,您会发现一些代码,可让您对CALayers的边界进行抗锯齿,类似于:
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;
但是对于视网膜显示器,最好绘制1像素宽的边框。 所以我改变了边界:
CGFloat borderWidth = 1 / [[UIScreen mainScreen] scale];
唯一的问题是,之后用户滚动时可以看到边缘“闪烁”。 绝对比不使用抗锯齿效果更好,但不如我所希望的那样平滑。 有没有人发现层不闪烁?
我知道不是最近,但也许contentScale可以解决问题。 在Swift中查看全部内容
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.