行具有取决于水平位置

问题描述:

我画的垂直线的网格的CALayer不同宽度上使用的CALayer行具有取决于水平位置

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) 

一个UIImage拉伸(这实际上是在一个循环中,与XPOS在循环增加)。 ..一些线条显得比其他线条明显更厚。还有 - 当我把图像放在UIScrollView中时,每行都会闪烁 - 当某些偏移量(滚动视图水平滚动时),它们变得明显更薄

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

我也试着调整contentModeLines drawn with core graphics that are set to the same width sometimes vary in size when drawn

我也试过保证所有计算我们CGFloat - 根据另一个SO帖子(抱歉,我找不到那个ag AIN)

无论是帮助

SUBQUESTION - 有没有办法拉拢CA一条线吗? - 或者是使用一个薄矩形的技术,我正在使用最好的方法来做到这一点?

+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) 
+0

谢谢云 - 抱歉应该包含该循环逻辑 - 它不会添加行两次。然而,我刚刚在一台物理设备上尝试过它,它看起来很好 - 这似乎是模拟器的工件 –

+0

@JonCook,很好的发现! –

原来是模拟器的假象。我刚刚在一台物理设备上试过了,它看起来很好

+0

其实@Yun CHEN - 它有点微妙 - 我刚刚在不同的模拟器上尝试过 - 这似乎是任何PLUS手机的​​问题 - 所以它似乎是一个屏幕分辨率问题(我注意到这里: https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions,PLUS手机渲染为3x,而另一些渲染为2x。我无法在物理设备上进行测试,没有加上工作 –