繁体   English   中英

在视网膜屏幕上对CALayer的0.5点(1像素)边框进行抗锯齿时闪烁

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM