2013-12-17 8 views
10

iosでキーフレームアニメーションを使用するときにアニメーションカーブを設定する方法は? UIViewののキーフレームアニメーションを使用したときのアニメーションカーブを設定する方法

animateKeyframesWithDuration:delay:options:animations:completion: 

を私はアニメーションブロックで行うものは何でも(私はUIViewKeyframeAnimationOptionCalculationModeCubicオプションを使用しますが、これは私が欲しいものではない限り)線形であるように思われます。

私は定期的なアニメーションを使用しているときUIViewAnimationOptionCurveEaseOutオプションのようなアニメーションにイーズアウトカーブを持っているしたいと思います:

animateWithDuration:delay:options:animations:completion: 

答えて

3

キーフレームを使用している場合は、自分で曲線を定義する必要があります。..線形キーフレームを追加すると、線形アニメーションが作成されます。非線形キーフレームを追加すると、非線形アニメーションになります。

frameStartTime

は、それは常にキーフレーム間の直線(または UIViewKeyframeAnimationOptionCalculationModeで定義されたようにペースが/立方/立方ペース、)正しいタイミング値を計算するには

UIViewKeyframeAnimationOptionCalculationModeLinear  = 0 << 9, 
UIViewKeyframeAnimationOptionCalculationModeDiscrete = 1 << 9, 
UIViewKeyframeAnimationOptionCalculationModePaced  = 2 << 9, 
UIViewKeyframeAnimationOptionCalculationModeCubic  = 3 << 9, 
UIViewKeyframeAnimationOptionCalculationModeCubicPaced = 4 << 9 

、あなたはできるだろう...ここにあなたの友達ですこれを参照として使用してください: RBBEasingFunction

例このようなEaseInOutQuad(tは相対アニメーション内の時間である):遅延:オプション:アニメーション:実際

if (t < 0.5) { 
    return 2 * t * t; 
} else { 
    return -1 + (4 - 2 * t) * t; 
} 
14

は、あなたがanimateWithDurationに使用するのと同じ曲線フラグ使用でき完了を:. animateKeyframesWithDuration:delay:options:animation:completion:

ドキュメントは混乱しますが、動作します。

曲線が使用できる値は次のとおりです。

UIViewAnimationOptionCurveEaseInOut = 0 << 16, 
UIViewAnimationOptionCurveEaseIn = 1 << 16, 
UIViewAnimationOptionCurveEaseOut = 2 << 16, 
UIViewAnimationOptionCurveLinear = 3 << 16, 

あなたが得るデフォルトのアニメーションカーブが0である、または使いやすさで、簡単にアウト。

+1

Works 100%が正しくあります。 – orkenstein

+2

恐ろしい!正常に動作します。非常に奇妙なことに、これはドキュメントにはありません。特に、デフォルトでは非線形であるためです。 –

+0

すべてのKeyFrameOptionsを試した後、私はこれを最初にやり直しました。それは警告を出しますが、完璧に動作します:) – Fogmeister

15

スウィフト2.0は、UIViewAnimationOptionsのキャストをUIViewKeyframeAnimationOptionsとして許可しません。また、|を一緒に送信することもできません。

ただし、UIViewKeyframeAnimationOptionsのイニシャライザにはrawValueが必要です。

let animationOptions: UIViewAnimationOptions = .CurveEaseOut 
let keyframeAnimationOptions: UIViewKeyframeAnimationOptions = UIViewKeyframeAnimationOptions(rawValue: animationOptions.rawValue) 

その後、私はanimateKeyframesWithDurationkeyframeAnimationOptionsを渡すことができ、すべてが素晴らしい作品:だから、次のコードは、UIViewKeyframeAnimationOptionsUIViewAnimationOptionsを入れて動作します。

+0

スウィフトについての良い点。 (投票されました) –

+2

神に感謝します!ありがとうございました! –

+1

'.CurveEaseOut'エフェクトをどのようにして増やすことができますか?ありがとう、素敵な答え! –

7

は、ここで私が思い付いたきれいスウィフトソリューションです:

extension UIViewKeyframeAnimationOptions { 

    init(animationOptions: UIViewAnimationOptions) { 
     rawValue = animationOptions.rawValue 
    } 

} 

使用法:

UIViewKeyframeAnimationOptions(animationOptions: .CurveEaseOut) 
0
にカーブを設定しようとしたとき@eskimwierによって答えは私のために動作しませんでした

linearanimateKeyframes(withDuration:delay:options:animations:completion:)。これはSwift 3、Xcode 8.2.1にありました。

私のアニメーションはデフォルトでeaseInOut(遅いスタートアップ、途中で速く、最後に遅くなりました)のように見えます。 Appleはデフォルトカーブを変更しましたか?

とにかく、私は、線形曲線を望んでいた、とアプローチはキーフレームアニメーションでUIViewAnimationOptionsを使用するために上記の提案を試みた:

let animationOptions: UIViewAnimationOptions = .curveLinear 
var keyframeAnimationOptions: UIViewKeyframeAnimationOptions = UIViewKeyframeAnimationOptions(rawValue: animationOptions.rawValue) 

UIView.animateKeyframes(withDuration: 3, delay: 0, options: [keyframeAnimationOptions], animations: { 
    //... animations here ... 
}, completion: nil) 

これは効果がなかったです。私のために働いたのは、animateKeyframesを呼び出す前にこれを行うことだけでした:

UIView.setAnimationCurve(UIViewAnimationCurve.linear) 
関連する問題