2017-09-23 118 views
0

我畫的垂直線的網格的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

提供循環代碼 –

回答

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

原來是模擬器的假象。我剛剛在一臺物理設備上試過了,它看起來很好

+0

其實@Yun CHEN - 它有點微妙 - 我剛剛在不同的模擬器上嘗試過 - 這似乎是任何PLUS手機的​​問題 - 所以它似乎是一個屏幕分辨率問題(我注意到這裏: https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions,PLUS手機渲染爲3x,而另一些渲染爲2x。我無法在物理設備上進行測試,沒有加上工作 –