使用CALayer绘制的线条取决于水平位置的不同宽度

时间:2017-09-23 04:40:28

标签: ios swift core-graphics

我正在使用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)

(这实际上处于循环中,xPos在循环中增加)...某些行显得比其他行明显更厚。 另外 - 当我将图像放在UIScrollView中时,每一行都会闪烁 - 当它们处于某些偏移时(滚动视图水平滚动),它们会变得明显变薄。

我尝试了较粗的lineWidth和矩形宽度的各种组合 - 但似乎没有任何帮助......很难想象为什么这些会导致差异,具体取决于线的位置......

我也尝试按照Lines drawn with core graphics that are set to the same width sometimes vary in size when drawn调整 contentMode

我也试过确保所有计算我们CGFloat - 按照另一个SO帖子(抱歉,我再也找不到)

都没有帮助

SUBQUESTION - 有没有办法在CA中绘制LINE? - 或者是使用薄矩形的技术,我采用最好的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

使用正常的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)

答案 1 :(得分:0)

原来是模拟器的人工制品。我刚刚在物理设备上试用了它看起来很好