如何不在数组中描边()每个UIBezierPath

时间:2017-04-06 15:11:10

标签: uiview drawing uibezierpath cgpath setneedsdisplay

我正在使用手写应用程序,我正在使用三种不同的UIBezierPath变量:

  • [路径] - UIBezierPath的
  • 数组
  • temporaryPath - 帮助平滑
  • realPath - 最终将添加到'paths'数组的路径

我使用的是路径数组而不是单个路径,因为我有一个平移工具来移动屏幕周围的线 - 所以它们需要是独立的实体。这个问题是我每次调用draw(:_)时都必须重绘整个数组:

override func draw(_ rect: CGRect) {
    strokeColor.setStroke()

    for path in paths{
        path.stroke()
    }

    realPath?.stroke()
    temporaryPath?.stroke()
}

在绘制20条路径后,这会产生性能问题。有没有解决方案,每次调用draw(:_)时都不重绘整个数组?

1 个答案:

答案 0 :(得分:0)

我计算出只通过我正在绘制的路径的矩形setNeedsDisplay(),并结合仅在touchesEnded(_ :)中绘制数组中的行的条件是一个OK解决方案。但是,具有类似功能的其他应用程序显然不会这样做,所以我认为有更好的解决方案。

    override func draw(_ rect: CGRect) {
    strokeColor.setStroke()
    realPath?.stroke()
    if yesnewline == true{
        for path in paths{
            path.stroke()
        }
        yesnewline=false
    }

    temporaryPath?.stroke()

}