如何用手指移动立即移动CAShapeLayer

时间:2018-07-05 07:54:01

标签: swift xcode swift-playground

目前,我正在操场(单视图)模式下学习,我想用手指移动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

}

1 个答案:

答案 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()