UIBezierPath笔划在touchesMoved中多次重绘它

时间:2017-03-05 12:03:03

标签: ios swift uibezierpath cgcontext

我正在getCurrentUser().getUid();中实施一个着色应用,它使用Swift 3.0触摸来填充着色样式。在UIBezierPath我创建路径:

touchesBegan

并且在touchFillPath = UIBezierPath() 我为每个新点抚摸它:

touchesMoved

但这导致路径在同一区域上方多次描边,因此所选颜色不透明度会发生变化。

我需要描绘每个touchesMoved调用的路径,以允许用户在移动触摸时看到颜色区域。

如何在不多次覆盖同一区域的情况下多次描边相同的路径?

2 个答案:

答案 0 :(得分:2)

touchFillPath.stroke()之后,您需要重置路径:

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

答案 1 :(得分:2)

@joeybladb我已经尝试过你的解决方案了,但它为每个触摸屏提取了一些小部分。行动。

所以为了解决这个问题,我保存了数组中触及的所有点:

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()