首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIBezierPath笔划在touchesMoved中多次重绘它

UIBezierPath笔划在touchesMoved中多次重绘它
EN

Stack Overflow用户
提问于 2017-03-05 20:03:03
回答 2查看 130关注 0票数 1

我正在用Swift 3.0实现一个着色应用程序,它使用UIBezierPath的触摸来填充着色样式。在touchesBegan中,我创建了路径:

代码语言:javascript
复制
touchFillPath = UIBezierPath()

touchesMoved中,我为每个新的点描边:

代码语言:javascript
复制
touchFillPath.addLine(to: location)
touchFillPath.stroke()

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-13 21:16:40

@joeybladb我已经尝试过你的解决方案,但它为每个“touchesMoved”操作绘制了很小的片段。

因此,为了解决这个问题,我将所有接触到的点保存在一个数组中:

代码语言:javascript
复制
pathPoints.append(NSValue(cgPoint:location))

在调用touchFillPath.removeAllPoints()之后,我将所有这些点再次添加到路径中:

代码语言:javascript
复制
for (index, element) in (pathPoints.enumerated())! {
   let point = element.cgPointValue
   if index == 0 {
       touchFillPath.move(to: point)
   } else {
       touchFillPath.addLine(to: point)
   }
}

所以下一次我调用touchFillPath.stroke()时,它会遍历整个路径:

代码语言:javascript
复制
touchFillPath.move(to: lastPoint)
touchFillPath.addLine(to: location)
touchFillPath.stroke()
票数 2
EN

Stack Overflow用户

发布于 2017-03-05 21:28:52

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

代码语言:javascript
复制
touchFillPath.removeAllPoints()
touchFillPath.move(to: location)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42608137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档