我用CALayer在一个UIImage上画了一个垂直线网格

let linePath = CGMutablePath()
linePath.addRect(CGRect(x: xPos, y: 0, width: 1.0, height: self.frame.size.height))
let lineLayer = CAShapeLayer()
lineLayer.path = linePath
lineLayer.lineWidth = 0.5
lineLayer.strokeColor = UIColor.black.cgColor
lineLayer.fillColor = UIColor.black.cgColor
self.layer.addSublayer(lineLayer)

(这实际上是在一个循环中,xpo在循环中增加)。。。有些线条看起来明显比其他线条粗。
另外-当我把图像放在UIScrollView中时,每一行都会闪烁-在某些偏移量下(滚动视图是水平滚动的),它们会明显变薄
我试过各种各样的加粗线条宽度和矩形宽度的组合,但似乎都没有帮助。。。很难想象为什么这些会导致差异取决于线的位置。。。
我也试过根据Lines drawn with core graphics that are set to the same width sometimes vary in size when drawn调整contentMode
我也试过确保所有的计算都是我们的CGFloat-根据另一个SO post(抱歉,我再也找不到了)
都没有帮助
子问题-有没有办法在加州划一条线?-或者我使用的是一个薄矩形的技术是最好的方法吗?

最佳答案

你的代码在正常的UIView下运行良好。我想有些线条比较细,因为较粗的线条画了两次以上。在添加新图层之前,请尝试检查并删除以前添加的图层,看看它是否解决了问题:

let lineLayer = CAShapeLayer()
//......
lineLayer.name = "VerticalLineLayer"

if let proviousLayerIndex = self.layer.sublayers?.index(where: { (layer) -> Bool in
    return layer.name == "VerticalLineLayer"
}) {
    self.layer.sublayers?.remove(at: proviousLayerIndex)
}
self.layer.addSublayer(lineLayer)

关于ios - 使用CALayer绘制的线宽取决于水平位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46376107/

10-10 15:30