簡體   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