2

定点の周りを前後に (1 回) ぶら下げたい画像があります。だから私は次のコードを持っています:

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];
myDial.transform = CGAffineTransformMakeRotation(degreesToRadians(45)); //lineA
[UIView commitAnimations];

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.5];
myDial.transform = CGAffineTransformMakeRotation(degreesToRadians(0 )); //lineB
[UIView commitAnimations];

上記のコードを実行すると、 lineA がすぐに (1.5 秒ではなく) 実行されます。その直後、lineB が 1.5 秒で実行されます。両方のアニメーションにそれぞれ 1.5 秒かかるようにします。これどうやってするの

4

3 に答える 3

4

2 つの UIView アニメーションを組み合わせて 1 つのビジュアル アニメーションを作成する代わりに、Core Animation を使用してすべてを 1 つのアニメーションで行うことができます。Core Animation を使用すると、アニメーションを自動的に反転させることができ (1.5 秒間で 45 度に戻り、同じ時間内に再び戻る)、2 つのアニメーションのタイミングを合わせる必要はありません。次のようにできます。

CABasicAnimation *rotate = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
[rotate setFromValue:[NSNumber numberWithFloat:0.0]];
[rotate setToValue:[NSNumber numberWithFloat:degreesToRadians(45)]];
[rotate setDuration:1.5];
[rotate setAutoreverses:YES]; // go back the same way
[rotate setTimingFunction:[CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut]];

[[myDial layer] addAnimation:rotate forKey:@"dangleMyDial"];

プロジェクトに QuartzCore.framework をインポートしておらず、 をインポートしていない場合は、Core Animation を機能させるためにインポートする必要があります。

于 2012-05-30T06:54:01.713 に答える
2

アイデアは、完了関数で次のアニメーション シーケンスを実行することです。

このコードをテストしました。電話のダイヤルのように見えるように、番号を少し変更して解放します。

[UIView animateWithDuration: 1.0 delay: 0 options: UIViewAnimationOptionCurveLinear animations:^{
    myDial.transform = CGAffineTransformRotate(rect.transform, M_PI / 4); 
} completion:^(BOOL finished) {
    [UIView animateWithDuration: 0.7 delay: 0 options: UIViewAnimationOptionCurveEaseIn animations:^{
        myDial.transform = CGAffineTransformIdentity;
    } completion: nil];
}];
于 2012-05-30T06:05:05.947 に答える
1

あなたが何を求めているのかを正しく理解できれば、あなたの問題がわかると思います。はアニメーションのsetAnimationDuration開始を遅らせません。むしろ、完了するまでの時間をアニメーションに伝えます。実際にアニメーションの開始を遅らせようとしている場合は、そのNSTimerために a を使用することを検討してください。(または setAnimationDelay メソッドを使用)。NSTimer最初の「ローテーション」を実行し、それが終了するまで待機してから、別の呼び出しNSTimerまたはループを使用して 2 番目を実行する をセットアップします。

于 2012-05-30T06:06:54.157 に答える