Пожалуйста, обратите внимание на следующий метод, который я использую для перемещения подслоя на 50 точек вверх по оси Y.В частности, обратите внимание на последнюю строку (которая закомментирована).
@objc func animateButtonPressed(_ sender: UIButton) {
let initialValue = customView.sublayer.position.y
let finalValue = customView.sublayer.position.y - 50
let animation = CABasicAnimation(keyPath: "position.y")
animation.fromValue = initialValue
animation.toValue = finalValue
animation.duration = 2
customView.sublayer.add(animation, forKey: "Reposition")
//customView.sublayer.position.y = finalValue
}
С кодом, как показано, я получаю следующее поведение:
- Слой медленно перемещаетсяиз начальной позиции в конечную позицию.
- Затем слой возвращается в исходную позицию.
- Слой остается в начальной позиции.
Все, что яread сообщает мне, что «прыжок назад» происходит, потому что я не обновил модель, чтобы отразить окончательное значение.Итак, давайте обновим модель, раскомментировав последнюю строку.Теперь поведение таково:
- Слой переходит с начальной позиции на конечную.
- Затем слой переходит обратно к начальной позиции.
- Слойзатем медленно перемещается в конечную позицию.
- Слой остается в конечной позиции.
По-видимому, происходит скачок, поскольку в модели устанавливается конечная позиция.Я чувствую, что я в ловушке 22. Любая помощь будет высоко ценится.
Рабочий проект, который иллюстрирует проблему, можно найти на GitHub
Xcode 10.0,iOS 12.2, Swift 4.2