Как переместить CAShapeLayer с движением пальца без задержки - PullRequest
0 голосов
/ 05 июля 2018

В настоящее время я учусь в режиме игровых площадок (одиночный просмотр), и я хочу переместить 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 голосов
/ 05 июля 2018

Я подозреваю, что вы видите неявную анимацию, которая происходит при изменении свойства «автономного» слоя. Другими словами, каждый раз, когда вы обновляете позицию, слой выполняет быструю (но не мгновенную) анимацию от предыдущего значения до нового значения.

Чтобы избежать этого и обновить слой до новой позиции без неявной анимации, вы можете изменить позицию в транзакции, которая отключает действия (более общий термин для анимации в Core Animation).

CATransaction.begin()
CATransaction.setDisableActions(true)
// Changes to the layer within this transaction won't have implicit animations
yourLayer.position = newPosition
CATransaction.commit()
...