什么是在Swift 4中移动UIBezierPath笔划的最佳方法?

时间:2017-12-09 19:13:38

标签: ios swift ipad core-graphics swift4

我正在尝试使用UIBezierPath笔划实现可以在Swift 4中更改位置的游标。目前,我有一个函数,其参数位置包含'光标的新x和y位置。我想使用此位置参数作为UIView中光标的新位置。我的当前实现每次调用函数时都会呈现另一个游标。有没有办法改变UIBezierPath的一个实例的位置?请参阅下面的示例代码以供参考。

private var cursor:UIBezierPath = UIBezierPath()

public func changeCursorLocation(location: ScreenCoordinates) {
    self.cursor = UIBezierPath()

    UIColor.black.setStroke()
    self.cursor.lineWidth = 2

    self.cursor.move(to: CGPoint(x: location.x, y: location.y))
    self.cursor.addLine(to: CGPoint(x: location.x + 100, y: location.y)) // change if staff space changes
    self.cursor.stroke()
}

2 个答案:

答案 0 :(得分:1)

将光标绘制为CAShapeLayer个对象。这使您无需重绘即可移动光标。

class MyView: UIView {
    let cursor = CAShapeLayer()

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        // Draw cursor and add it to this view's layer
        let path = UIBezierPath()
        path.move(to: .zero)
        path.addLine(to: CGPoint(x: 100, y: 0))

        cursor.path = path.cgPath
        cursor.strokeColor = UIColor.black.cgColor
        cursor.lineWidth = 2

        layer.addSublayer(cursor)

        changeCursorLocation(location: CGPoint(x: 50, y: 100))
    }

    func changeCursorLocation(location: CGPoint) {
        cursor.position = location
    }
}

enter image description here

答案 1 :(得分:0)

您可以从0,0开始创建Bezier路径,然后在绘制之前将x / y平移变换应用于绘图上下文。详细信息取决于您的绘图方式(您发布的代码是从视图draw(rect:)方法调用的吗?)