2016-10-11 3 views
2

В настоящее время у меня есть слой (CALayer), который я масштабирую между этими масштабами, чтобы создать анимацию.Как я могу замедлить анимацию CALayer.transform?

private let invisibleScale = CATransform3DMakeScale(0.0,0.0,1.0) 
private let fullScale = CATransform3DMakeScale(2.5,2.5,1.0) 

Простого вызов функции ниже на моем слое слой одушевляет так же, как я хочу его (за исключением немного поститься).

animationLayer.transform = invisibleScale 
animationLayer.transform = fullScale 

Я пытался добавить CABasicAnimation с преобразованием в качестве значения, но это не работает, так как она восходит к исходному масштабу после окончания анимации. Что-то вроде этого:

let animation = CABasicAnimation(keyPath: "transform") 
animation.toValue = NSValue(caTransform3D: invisibleScale) 
animation.duration = animationDuration 
animationLayer.add(animation, forKey: "transform") 

Так что я попытался добавить animationLayer.transform = Fullscale в конце, чтобы обновить состояние после анимации.

let animation = CABasicAnimation(keyPath: "transform") 
animation.toValue = NSValue(caTransform3D: invisibleScale) 
animation.duration = animationDuration 
animationLayer.add(animation, forKey: "transform") 
animationLayer.transform = fullScale 

Это приводит к анимации, которая выглядит точно так же, как и просто звоню:

animationLayer.transform = fullScale 

Я также попытался вещи, как:

UIView.animate(withDuration: 10) { 
     self.animationLayer.transform = fullScale 
} 

Это также одушевляет с той же скоростью, как просто набирать анимациюLayer.transform = invisibleScale.

Любые советы о том, как сделать эту работу, будут высоко оценены!

ответ

5

Я, наконец, нашел решение, использующее CATransaction!

CATransaction.begin() 
CATransaction.setAnimationDuration(0.5) 
animationLayer.transform = transform 
CATransaction.commit() 
Смежные вопросы