我正在尝试使用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()
}
答案 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
}
}
答案 1 :(得分:0)
您可以从0,0开始创建Bezier路径,然后在绘制之前将x / y平移变换应用于绘图上下文。详细信息取决于您的绘图方式(您发布的代码是从视图draw(rect:)
方法调用的吗?)