2017-03-05 33 views
1

我在Swift 3.0中實現着色應用程序,該應用程序使用UIBezierPath進行觸摸以填充着色風格。在touchesBegan我創建路徑:UIBezierPath中風在觸摸中重繪多次

touchFillPath = UIBezierPath() 

touchesMoved我衝程它爲每一個新點:

touchFillPath.addLine(to: location) 
touchFillPath.stroke() 

但這導致路徑撫摸多次相同的區域的上方,因此所選擇的顏色不透明度的變化。

我需要爲每個touchesMoved調用敲擊路徑以允許用戶在移動觸摸時看到彩色區域。

我怎樣才能在不重複同一區域的情況下重複多次相同的路徑?

+0

「這個結果在p在相同區域上方多次觸擊,因此選定的顏色不透明度會發生變化「......如果是這樣,您必須將其渲染爲每個」touchesMoved「或類似物的圖像。我們需要更多的上下文來回答這個問題,因爲問題不是路徑的「中風」,而是您在更廣泛的背景下所做的。但答案很可能是(a)每次只是從最後一個「位置」到新的一個新路徑;或(b)不建立新的圖像(或其他)。很難說沒有更多的上下文。 – Rob

回答

2

@joeybladb我已經試過您的解決方案,但它吸引小部分爲每個「touchesMoved」行動。

因此,要解決這個問題,我保存在一個數組感動了所有要點:

pathPoints.append(NSValue(cgPoint:location)) 

,並呼籲touchFillPath.removeAllPoints()後,我再次添加所有這些點的路徑:

for (index, element) in (pathPoints.enumerated())! { 
    let point = element.cgPointValue 
    if index == 0 { 
     touchFillPath.move(to: point) 
    } else { 
     touchFillPath.addLine(to: point) 
    } 
} 

從而使下一次我打電話touchFillPath.stroke(),它筆畫全程:

touchFillPath.move(to: lastPoint) 
touchFillPath.addLine(to: location) 
touchFillPath.stroke() 
2

touchFillPath.stroke()後,您就需要重新設置路徑:

touchFillPath.removeAllPoints() 
touchFillPath.move(to: location)