3

UIScrollView内に、ズームインおよびズームアウトできる画像があります。ユーザーが画像を90度回転できるボタンがあります。

(void)RotateImage {
    CGAffineTransform rotateTrans = CGAffineTransformMakeRotation(-90.0 / 180.0 * 3.14);
    BaseImg.transform = rotateTrans;
}

画像を回転させた後、ズームインおよびズームアウトできません。画像が画面上で狂ってしまい、回転していない状態に戻ります。

私は何が間違っているのですか?コード例は素晴らしいでしょう!ありがとう :)

4

2 に答える 2

1

UIScrollViewは、含まれているビューの変換を引き継ぐのが好きです。2つの解決策があります:

  1. 含まれているビューを変更せずに画像を回転します。
  2. サブレイヤー内に画像を表示するUIViewサブクラスを作成します。

画像を回転させるには、UIImageを90度回転させる方法を参照してください。。常に90度の回転のみを行っている場合は、@PeterSarnowskiのソリューションを参照してください。あなたがここでしていることにそれを適応させるために、それが:であると仮定BaseImgUIImageViewます

- (void) rotateImage
{
    UIImage *sourceImage = [baseImg image];
    UIImage *rotatedImage = [UIImage imageWithCGImage:[sourceImage CGImage] scale:1.0 orientation:UIImageOrientationRight];
    [baseImg setImage:rotatedImage];
}

これは1回だけ回転します。rotateImageを繰り返し機能させるには、既存のプロパティを読み取り、orientation時計回りまたは反時計回りの順序で次のプロパティに移動します。

baseImg画像が正方形でない場合は、新しいアスペクト比を反映するようにサイズを変更する必要がある場合もあります。

UIViewサブクラスを作成するCALayerには、ビューレイヤーのサブレイヤーとしてを保存する必要があります。画像をサブレイヤーに保存し、サブレイヤーを自由に変換します。これはより高速で、任意の回転が可能ですが、回転する画像がビューの境界を超えないように、独自のスケーリングを計算する必要があります。

于 2012-04-09T01:47:52.617 に答える
0

画像を単純に回転させるにはコードは完璧ですが、ズームインとズームアウトを追加してから回転を追加するには、その変換を保持する必要があります。これが役立つサンプルコードです。

https://github.com/elc/iCodeBlogDemoPhotoBoard

于 2012-04-09T05:35:53.917 に答える