0

画面の上部から下部にまっすぐにドロップするように画像をアニメーション化しましたが、画像が画面の特定のポイントに到達するまでにかかる時間を決定できるようにしたいと思います。通常、これは、必要なポイントのy座標にアニメーションの長さを掛け、それを画像が最初から最後まで移動する「ピクセル」の合計量で割ることで簡単に実行できます。ただし、objective-cアニメーションは、ゆっくりと開始し、加速してから減速してから停止します。つまり、この方法を使用して所要時間を計算することはできません。それで、下向きに動くアニメーションがスポットに到達するのにかかる時間を決定する方法はありますか?

編集:アニメーションでは、おそらくアニメーション中のどの時点でもオブジェクトのポイントを決定する方法はありません。提供する利用可能な情報は、開始点と終了点だけです。

4

1 に答える 1

1

を使用している場合は 、パラメータをにanimateWithDuration:delay:options:animations:completion:設定できます。デフォルトにはファンキーな曲線がありますが、それはまさにそのように聞こえます。線形。スピードアップもスピードダウンもありません。また、はい、アニメーションビューの場所にアクセスする方法があります。そのプレゼンテーション層(アニメーションの提示に使用される層)にアクセスし、そのフレームの位置を使用します。optionsUIViewAnimationOptionCurveLinearUIViewAnimationOptionCurveLinear

編集:これは、ピタゴラスの定理を使用してビューから目的地までの距離を計算し、線形曲線を使用してビューを目的地までアニメーション化するブロックベースのアニメーションの例です。

    UIView* view = [[UIView alloc] init];
    CGPoint destination = CGPointZero;
    [UIView animateWithDuration: sqrt(pow(view.frame.origin.x - destination.x, 2) + pow(view.frame.origin.y - destination.y, 2)) / pixelsPerSecondVelocity
                          delay: 0
                        options: UIViewAnimationOptionCurveLinear
                     animations:^(void) {
                         view.frame = CGRectMake(destination.x,destination.y,view.frame.size.width,view.frame.size.height);
                     }
                     completion:^(BOOL finished) {
                         // nothing
                     }];

iOS 4より下をターゲットにしている場合は、以下のコードをの後に追加できbeginますcommit

[UIView setAnimationCurve:UIViewAnimationCurveLinear];
于 2012-11-30T23:39:02.337 に答える