-1

これは私が達成したいことの結果です:


(出典:mouseaddict.com

アプリの静止画像がありますが、モーションを追加したいと思います。

メーターを想像してみてください。下部にロックされた針があり(時計回りの文字盤の6:00)、針の上部が左から右に弧を描いて回転します。弧(ゼロ)は、針が(おおよそ)時計回りの9:30の位置に向けられた状態で始まり、その弧の最上部は、時計回りのおよそ2:30に終わるはずです-スタイルフェイス。

私はいくつかのグラフィック要素を持っています1)丸いメーター面(png)と2)メーター針の垂直方向のpngファイル。針を丸い面の中で弧を描くように動かす必要があります。

それで、上記の2つの要件を想定して、アニメーションを使用してメーター内で針を回転させる最良の方法は何ですか?

私はこれを見ました:スピードメーター-しかし、これは最良の方法ですか?私の主な問題は、針を下部でロックし、左から右に少しだけ動かしたいということです。ドキュメントがほとんどない(実際にはない)という事実と同じように。「」のようなものcalculateDeviationAngleは説明されていません。

また、スピードメーターは大きく動いているようで、その例のピボットポイントは機能しません...(私は思いません)

次のようなコマンドでこれを呼び出したいと思います。

[self moveNeedleToPosition:degreeOrClockFaceNumber]現在の位置から少し過ぎた位置に移動しdegreeOrClockFaceNumber、跳ね返ってで静止しdegreeOrClockFaceNumberます。

TIA

4

1 に答える 1

0

私は次のことを行いました。画像をいくつかの部分に分割しました。輪郭(黒)部分、背景、針。同じ正確な「フットプリント」(形状)を持つ各ピース。

theImageView針のimageView(他の2つのimageViewの上に重ねられている)であると仮定して、次の関数を作成しました。

-(void) rotateNeedle:(UIImageView *)theImageView toAngle:(float) theAngle
{
    [UIView animateWithDuration:0.5
                          delay: 0.0
                        options: UIViewAnimationOptionCurveEaseInOut
                     animations:^{
                         theImageView.transform =CGAffineTransformMakeRotation((M_PI / 180) * (theAngle + 10));
                     }
                     completion:^(BOOL finished){
                         //
                         [UIView animateWithDuration:0.5
                                          animations:^{
                                              theImageView.transform = CGAffineTransformMakeRotation((M_PI / 180) * theAngle);
                                          }];


                     }];

}

ブロック内の最初のアニメーションは、アニメーションの「過去の撮影」部分を実行します...つまり、実際の値を10度超えて移動します。次に、完了ブロックの2番目のアニメーションは、針を正しい値に「バウンス」します。これらのアニメーションの速度は、物理効果を生み出します。それは私にとって非常にうまくいきます。

于 2013-01-21T06:37:07.310 に答える