1

ビューレイヤーのアンカーポイントプロパティをに設定して、画像を下の中心で回転させようとしました。下の中心CGPointMake(0.5, 1)に基づいて回転しましたが、画像ビューの下の中心は画像ビューの中心位置に変換されたため、画像全体が画像の高さの半分だけ上に移動しました。画像ビューの中心を維持しながら、下の中心を中心に回転するにはどうすればよいですか?

以前にこの問題に遭遇した人はいますか?

ねえみんな、画像で回転をどのように機能させたいかの絵のデモンストレーションをここに示します!

ここに画像の説明を入力

これが元の変形前の画像です!ご覧のとおり、画像の下部中央を示すために赤い点を付けました。

ここに画像の説明を入力

これが回転した画像です。画像は時計回りに数度回転しています。これは中心を中心に回転していますが、これも私が望んでいるものではありません!!

ここに画像の説明を入力

Calebs answer に投稿された変換を適用した後に取得された画像..注: 変換は、上記の垂直画像を格納する画像ビューに適用されました!回転の欠陥を見ることができるように、下部の中央が上がり、回転さえも異なりました. 180 度の回転が必要で、画像全体が少し上に移動しました。

繰り返しますが、画像を時計の針のように回転させたいだけですが、その下の中心を中心にしています

ありがとうございました!

4

1 に答える 1

1

画像が描かれているビューを回転させたいと仮定すると、それを行う通常の方法は、3 つの別々のマトリックスから変換マトリックスを構成することです。最初のものは、画像をその幅の半分だけ左に移動します。2 番目は、ビューを回転します。3 番目は、イメージをその幅の半分だけ右に移動します (つまり、最初の逆です)。これら 3 つを組み合わせると、下の中心を中心に画像を回転させる行列が得られます。

たとえば、次の場合:

CGFloat x = imageWidth/2.0;
CGFloat r = 1.0; // some value in radians;

次のような変換を設定できます。

CGAffineTransform t1 = CGAffineTransformMakeTranslation(-x, 0);
CGAffineTransform t2 = CGAffineTransformRotate(t1, r);
CGAffineTransform t3 = CGAffineTransformTranslate(t2, x, 0);

t3は、変換、回転、逆変換をすべて 1 ステップで行う最終的な変換です。画像ビューの変換として設定すると、下の中心を中心にt31.0 ラジアン (または設定した値) だけ回転したビューが表示されます。r

私の以前のエラーを修正することに加えて、Peter Hosey のコメントは、ビューの代わりにレイヤーを回転させる別のオプションを指摘しています。これはあなたが探しているものではないと思いますが、そうである場合は、レイヤーの変換が、anchorPointデフォルトで境界長方形の中心に設定されている について行われることを知っておく必要があります。境界四角形の下部中央を中心に回転するには、まずアンカー ポイントを下部中央に設定してから、回転変換を適用します。transform(レイヤーのプロパティは であることに注意してくださいCATransform3D。上記のようにアフィン変換を使用する場合は、setAffineTransform:メソッドを使用してください。)

于 2013-08-19T01:20:31.190 に答える