Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 对视网膜屏幕上的CALayer的0.5点(1像素)边界进行抗锯齿处理时闪烁_Ios_Iphone_Core Animation_Calayer_Antialiasing - Fatal编程技术网

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

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

环顾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;
但是对于视网膜显示器来说,画一个像素宽的边框会更好。因此,我将边界更改为:

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