2017-01-06 8 views
2

Я хочу создать анимацию с CALayers. У меня есть родительский слой с несколькими подслоями, и я хотел бы увеличить масштаб и прокрутить.Анимация CALayer - масштабирование и прокрутка

Сначала я пытаюсь изменить масштаб родительского слоя следующим образом:

let transformAnimation = CABasicAnimation(keyPath: "bounds.size.width") 
transformAnimation.duration = 2.3 
transformAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
transformAnimation.toValue = 650*2 
transformAnimation.beginTime = CACurrentMediaTime() + 4 
transformAnimation.autoreverses = false 
transformAnimation.isRemovedOnCompletion = false 
transformAnimation.fillMode = kCAFillModeForwards 
parentLayer.add(transformAnimation, forKey: "transformAnimation") 
// 
let transformAnimation2 = CABasicAnimation(keyPath: "bounds.size.height") 
transformAnimation2.duration = 2.3 
transformAnimation2.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionEaseInEaseOut) 
transformAnimation2.toValue = 650*2 //CGAffineTransform.identity 
transformAnimation2.beginTime = CACurrentMediaTime() + 4 
transformAnimation2.autoreverses = false 
transformAnimation2.isRemovedOnCompletion = false 
transformAnimation2.fillMode = kCAFillModeForwards 
parentLayer.add(transformAnimation2, forKey: "transformAnimation2") 

Когда анимация применяется, подслоях оставлены в неправильном положении и размере. Должен ли я также применять к ним анимацию? Как я могу это сделать?

Спасибо!

ответ

1

Я предполагаю, что вы обновляете width и height одного слоя, и вам интересно, изменит ли подслои bounds. Нет, вам, вероятно, придется оживить их отдельно. Но вместо того, чтобы инициировать отдельные анимации, вы можете использовать их с CAAnimationGroup.

Если это были виды, вы можете определить ограничения, которые более грамотно координируют изменение размеров объектов. Но со слоями вам придется делать это самостоятельно. (Могут быть причины, по которым вы делаете это так, как вы, но это не ясно из вопроса.)

+0

Спасибо, Роб! Я попробую это – Carol