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