10

デフォルトでは、UIImageView はその中心を中心にのみ回転します。画像内の他のポイントを中心に回転させるにはどうすればよいですか?

4

1 に答える 1

17

これを行う1つの方法は、UIImageViewの基になるレイヤーのanchorPointを変更し、それを中心に回転させることです。次のようなものを使用して、回転点を変更できます。

imageView.layer.anchorPoint = CGPointMake(0.25, 0.25);

アンカーポイントは、レイヤー内の相対座標で定義されます。つまり、(0,0)はレイヤーの左上(iPhoneではUIViewレイヤーがY座標を反転している)であり、(1,1)は右下です。

アンカーポイントを移動すると画像が移動する可能性があるため、後でその位置を調整する必要がある場合があります。

その新しいアンカーポイントを中心に画像のレイヤーを回転させるには、次のようなものを使用して、レイヤーのCATransform3D構造体を変更できます。

CATransform3D rotatedTransform = imageView.layer.transform;
rotatedTransform = CATransform3DRotate(rotatedTransform, 60.0 * M_PI / 180.0, 0.0f, 0.0f, 1.0f);
imageView.layer.transform = rotatedTransform;

この例では、アンカーポイントを中心に60度ずつ段階的に回転します。

レイヤーへのすべての変更は、デフォルトでアニメーション化されます。これらのプロパティへの変更を次のようにCATransactionで囲むことにより、このアニメーションを無効にできます。

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

// Code for changes here

[CATransaction commit];
于 2009-05-08T12:46:55.037 に答える