3

私は iPhone 用のアニメーション時計アプリケーションに取り組んでおり、次のコードで取得したビュー内の 3 つのノードすべてをピボットする必要があります。

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions];

clockarm.layer.anchorPoint = CGPointMake(0.0, 0.0);
[CATransaction commit];

[CATransaction begin];
[CATransaction setValue:(id)kCFBooleanFalse forKey:kCATransactionDisableActions];
[CATransaction setValue:[NSNumber numberWithFloat:50.0] forKey:kCATransactionAnimationDuration];

CABasicAnimation *animation;
animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
animation.fromValue = [NSNumber numberWithFloat:-60.0];
animation.toValue = [NSNumber numberWithFloat:2 * M_PI];
animation.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionLinear];
animation.delegate = self;
[clockarm.layer addAnimation:animation forKey:@"rotationAnimation"];
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];


[CATransaction commit];

問題は、一度だけ回転することです。360 度だけ回転してから停止します。無期限に針を回転させたい。どうすればいいですか?

4

6 に答える 6

4

やったことはありませんが、やってみたいのはこちらです。デリゲートは既に に設定されていselfます。デリゲートのメソッドanimationDidStop:finished:を実装し、上記のコードを配置するメソッドを呼び出すだけです。必ずメイン スレッドで呼び出してください (performOnMainThread を使用)。

于 2009-02-14T11:53:10.887 に答える
3

animationDidFinish デリゲート メソッドを追加し、別のローテーションのためにアニメーションを再度設定します。CA では、物事を 360 度以上回転させることはできません。

于 2009-02-14T11:43:39.347 に答える
1

私は問題を少し違った見方をします。なぜ50秒を使用しているのかわかりませんが、正確な時間を維持するためにこれに頼ることはありません. 代わりに、毎秒または0.5秒ごとに起動するタイマーを設定し、時計をアニメーション化して現在の位置から新しい時間に移動します。

PS fromValue は度単位のように見えますが、ラジアンである必要があります。

于 2010-01-19T05:08:42.227 に答える
0

nなし。繰り返しの値-1を使用しようとしますが、これを行うことはありませんが、役立つ場合があります。

于 2010-05-23T07:57:57.663 に答える
0

「scalingAnimation.repeatCount=1000000000;」を使用します。目的のために。それがあなたのための道であるかどうかはわかりません。

于 2009-05-06T06:36:48.370 に答える