わかりました、私はそれを調べると約束したので、ここに私の答えがあります:
私はあなたのシーンとある程度同等のシーンを作成します。次のようにコーディングします。
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(self.view.bounds.size.width/2-100,
self.view.bounds.size.height/2-125,
200,
250)];
imageView.image = [UIImage imageNamed:@"testimage.jpg"];
imageView.contentMode = UIViewContentModeScaleAspectFill;
/*
* I added clipsToBounds, because my test image didn't have a size of 200x250px
*/
imageView.clipsToBounds = YES;
[self.view addSubview:imageView];
NSLog(@"frame: %@",[NSValue valueWithCGRect:imageView.frame]);
NSLog(@"bounds: %@",[NSValue valueWithCGRect:imageView.bounds]);
imageView.layer.anchorPoint = CGPointMake(0.5, 0.5);
imageView.transform = CGAffineTransformMakeRotation(30*M_PI/180);
NSLog(@"frame after rotation: %@",[NSValue valueWithCGRect:imageView.frame]);
NSLog(@"bounds after rotation: %@",[NSValue valueWithCGRect:imageView.bounds]);
このコードは、ARCを使用していることを前提としています。追加しない場合
[imageView release];
最後に。
このコードを使用すると、ログは次のようになります。
[16221:207] frame: NSRect: {{60, 105}, {200, 250}}
[16221:207] bounds: NSRect: {{0, 0}, {200, 250}}
[16221:207] frame after rotation: NSRect: {{10.897461, 71.746826}, {298.20508, 316.50635}}
[16221:207] bounds after rotation: NSRect: {{0, 0}, {200, 250}}
ご覧のとおり、境界は常に同じです。もちろん、30°C回転させた画像は、手で回転させていない場合よりも幅が広いため、回転によって実際に変化するのはフレームです。また、中心点がビューの実際の中心に設定されているため、フレームの原点も変更されます(左と上に押されます)。画像自体のサイズは変更されないことに注意してください。結果はスケーリングなしで達成できるため、スケール変換は使用しませんでした。
しかし、明確にするために、ここにいくつかの写真があります(0°、30°90°回転):

彼らはすでにかなり似ているように見えますよね?境界とフレームの違いを明確にするために、実際のフレームを描画しました。次のものは本当にそれを明らかにします。すべての画像をオーバーレイし、UIImageViewを回転させた負の角度で回転させたところ、次の結果が得られました。

したがって、画像を回転させる方法は非常に簡単です。ここで、実際にフレームを同じままにしておきたいという問題があります。最終フレームに元のフレームのサイズ(この例では幅200、高さ250)を設定する場合は、結果のフレームを拡大縮小する必要があります。しかし、これはもちろん、あなたが望まない画像のスケーリングをもたらします。実際には、フレームを大きくしても問題はないと思います。回転のために、フレームを考慮に入れる必要があることを知っておく必要があります。
つまり、回転後に同じフレームを持つUIImageViewを作成することはできません。これは、UIViewでは不可能です。長方形について考えてみてください。回転させると、回転後は長方形になりませんね。
もちろん、UIImageViewを別のUIView内に配置することもできます。このUIViewは、幅200、高さ250の回転されていないフレームを持ちますが、回転された長方形がオリジナルとは異なる幅と高さ。
これがお役に立てば幸いです。:)