2017-02-08 13 views
0

次の結果は、ビューが2秒間に1/2のサイズからスケールアップされます。サブレイヤトランスフォームのアニメーションの時間が無視されます

myView.layer.transform = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5)) 
UIView.animate(withDuration: 2, animations: { 
    myView.layer.transform = CATransform3DIdentity 
}) 

ただし、次のように表示すると、ビューが直ちに拡大され、期間は無視されます。

myView.layer.sublayerTransform = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5)) 
UIView.animate(withDuration: 2, animations: { 
    myView.layer.sublayerTransform = CATransform3DIdentity 
}) 

なぜ、sublayerTransformにアニメーションが適用されないのですか? CALayerはAnimatableであることに注意してください。

答えて

2

sublayerTransformUIView.animateでアニメートすることはできません。代わりにCABasicAnimationを使用してください。

let animation = CABasicAnimation(keyPath: "sublayerTransform") 
animation.fromValue = CATransform3DMakeAffineTransform(
    CGAffineTransform.identity.scaledBy(x: 0.5, y: 0.5)) 
animation.duration = 2 
myView.layer.add(animation, forKey: "sublayerTransform") 
myView.layer.sublayerTransform = CATransform3DIdentity 
関連する問題