目前,我正在操场(单视图)模式下学习,我想用手指移动CAShapeLayer,但目前仅能延迟使用。我该如何解决这个问题?
枚举中变量的一个小例子
var layer: CAShapeLayer{
switch self {
case .rectangle:
let rectangle = UIBezierPath(rect: CGRect(x: 60, y: 250, width: 250, height: 350))
let rect = CAShapeLayer()
rect.frame = CGRect(x: 0, y: 0, width: 250, height: 350)
rect.path = rectangle.cgPath
rect.fillColor = UIColor.yellow.cgColor
return rect
和触摸移动的方法代码
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
guard let location = touches.first?.location(in: self.view) else {return}
currentlayer?.position = location
}
答案 0 :(得分:0)
我怀疑您看到的是当您更改“独立”图层的属性时发生的隐式动画。换句话说,每次更新位置时,图层都会从前一个值到新值进行快速(但不是即时)动画。
为避免这种情况,并在不使用隐式动画的情况下将图层更新到新位置,您可以在禁用动作的事务中更改位置(“ Core Animation”中动画的更通用术语)。
CATransaction.begin()
CATransaction.setDisableActions(true)
// Changes to the layer within this transaction won't have implicit animations
yourLayer.position = newPosition
CATransaction.commit()