3

Core Animation を使用して任意の点を中心にレイヤーを回転するにはどうすればよいですか? (私の場合、回転させたいレイヤー内にないポイント)

アンカーポイントを変更するたびに何か問題が発生しない限り、レイヤーの位置も変更されるため、アンカーポイントを変更せずにこれを行うことを好みます。

私はそのようなことを試みましたが、うまくいきませんでした:

[UIImageView beginAnimations:nil context:nil];
CATransform3D rotationTransform = CATransform3DIdentity;
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, -100.0, 0.0);
rotationTransform = CATransform3DRotate(rotationTransform, DegreesToRadians(180),
                        0.0, 0.0, 1.0);
rotationTransform = CATransform3DTranslate(rotationTransform, 0.0, 100.0, 0.0)
shape1.layer.transform = rotationTransform;
[UIImageView commitAnimations];

回転中に回転軸が動いているように見えます。

4

4 に答える 4

3

あなたの解決策は問題ありませんが、「期待される方法」はアンカーポイントを使用することです。

位置がアンカーポイントにアタッチされているため、アンカーポイントを設定すると、それは動き回っています。つまり、アンカーポイントがスーパーレイヤーの座標系のどこにあるかを設定します。

何かが機能しているので、おそらく変更する価値はありませんが、次回のために灰白質に追加するものだけです。

幸運を!

于 2009-02-05T19:35:07.863 に答える
2

これを行うには、複数の変換を追加します。

  1. レイヤーを (-rotCenterX, rotCenterY) で移動します
  2. レイヤーを回転させる
  3. レイヤーを (rotCenterX, rotCenterY) で移動します
于 2008-10-14T03:00:07.290 に答える
1

回転と同じように翻訳がアニメーション化されるため、最初のソリューションはうまくいきません。したがって、ローテーションの「カスタムセンター」はローテーション中に移動します。実際に必要なのは、アニメーションなしの翻訳と、そのアニメーションなしの翻訳に基づくアニメーション付きの回転です。問題は、私は現在まったく同じ問題を抱えており、まだ解決策を見つけることができませんでした. 私は現時点でCATransactionを見ていますが、それが鍵になることを願っています...

于 2009-04-15T20:07:39.873 に答える
0

最後に、回転軸を中心にして新しい大きなレイヤーを作成し、回転させたいレイヤーをサブレイヤーとして設定しました。

次に、サブレイヤーの代わりに大きなレイヤーを回転させます

于 2008-10-20T16:17:50.750 に答える