Я хочу, чтобы слой вести себя так:CABasicAnimation запускается после неявных анимации
Вместо этого, он ведет себя так:
карта покадровая анимация создается два CABasicAnimation
s применяется в CAAnimationGroup
. Неправильный эффект спина происходит из-за неявной анимации из изменения свойства CALayer
, а затем моя анимация, указанная в циклах CABasicAnimation
. Как я могу остановить запуск неявной анимации, чтобы запустить только указанную анимацию?
Вот соответствующий код:
class ViewController: UIViewController {
var simpleLayer = CALayer()
override func viewDidLoad() {
super.viewDidLoad()
let tap = UITapGestureRecognizer(target: self, action: #selector(handleTap))
self.view.addGestureRecognizer(tap)
simpleLayer.frame = CGRect(origin: CGPoint(x: view.bounds.width/2 - 50, y: view.bounds.height/2 - 50), size: CGSize(width: 100, height: 100))
simpleLayer.backgroundColor = UIColor.blackColor().CGColor
view.layer.addSublayer(simpleLayer)
}
func handleTap() {
let xRotation = CABasicAnimation(keyPath: "transform.rotation.x")
xRotation.toValue = 0
xRotation.byValue = M_PI
let yRotation = CABasicAnimation(keyPath: "transform.rotation.y")
yRotation.toValue = 0
yRotation.byValue = M_PI
simpleLayer.setValue(M_PI, forKeyPath: "transform.rotation.y")
simpleLayer.setValue(M_PI, forKeyPath: "transform.rotation.x")
let group = CAAnimationGroup()
group.animations = [xRotation, yRotation]
group.duration = 0.6
group.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut)
simpleLayer.addAnimation(group, forKey: nil)
}
}
Я на самом деле не положителен, если 'setValue (_: forKeyPath:)' контролируется Core Animation для активации неявных анимаций или нет. Если вы окружаете эти два вызова функций с помощью ['CATransaction', который отключает действия] (http://calayer.com/core-animation/2016/05/17/catransaction-in-depth.html#preventing-animations-from-), это устраняет проблему? – LucasTizma
Спасибо, @LucasTizma! Это был правильный код. Я описал его полностью в ответе ниже. –
Я получил нижний предел по исходному вопросу, так что теперь значение равно «-1». Я не уверен, почему я получил понижение. Если бы downvoter мог прокомментировать, я был бы рад ответить на его или ее беспокойство. Это не такой конкретный случай использования, как может показаться. Этот вопрос в целом применим. Если вы не добавите код для отключения неявной анимации, CAAnimationGroup не будет вести себя так, как ожидалось. –