2016-07-31 8 views
2

スプリング効果(例:UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)など)を使用してCAShapeLayerを回転させたいが、レイヤー上には表示されません。スプリング効果付き回転アニメーション

ボタンをタップすると、メインレイヤのサブレイヤは3 * PI/4に回転し、スプリングは2 * PI/3にバウンスする必要があります。次に、ボタンを再びタップすると、レイヤーの回転は、以前とは逆の順序で行う必要があります。最初に2 * PI/3にバウンスしてから、最初の位置に回転します(最初の回転の前に)。

どうすればいいですか? UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:)でレイヤーのトランスフォームプロパティがデフォルトでアニメーション可能なので、私はそれを達成できません。

私はCATransactionを変更しようとしましたが、それは唯一の(対価その他の回転を考慮せずに)1つの角度で回転:

let rotation1 = CGAffineTransformRotate(CGAffineTransformIdentity, angle1) 
let rotation2 = CGAffineTransformRotate(CGAffineTransformIdentity, angle2) 
let transform = CGAffineTransformConcat(rotation1, rotation2) 
CATransaction.begin() 
CATransaction.setAnimationDuration(0.6) 
self.plusLayer.setAffineTransform(transform) 
CATransaction.commit() 

更新

Duncan C postによると、私はCASpringAnimationを使用しようと、私はアニメーションをachive一方向:

ボタンをタップしてアニメーションを反転するにはどうすればよいですか?

ご協力いただきありがとうございます。

答えて

2

UIViewブロックアニメーションは、ビューのプロパティをアニメートするためのものです。 UIView.animateWithDuration(_:delay:usingSpringWithDamping:initialSpringVelocity:options:animations:completion:

レイヤーのプロパティをアニメートする必要がある場合は、コアアニメーションを使用する必要があります。これを行うには、ボタンのトランスフォーム(CGAffineTransformタイプの2Dトランスフォーム)をアニメートします。

AppleはiOS 9で春のCAAnimationを追加(または一般公開)しているようですが、Xcodeのドキュメントには含まれていないようです。

このスレッドをチェックアウト:

SpringWithDamping for CALayer animations?

+0

感謝を!それは私をたくさん助けました!しかし、私は1つの問題が残っています:ボタンをタップしてそのアニメーションを逆にする方法? – krlb

+0

これを行う方法の1つです:現在の回転値と回転値を追跡し、ボタンがクリックされるたびに切り替えるインスタンス変数を作成します。 –

+0

あなたはそうです、それは動作します!ありがとうございました! – krlb

関連する問題