Ok tôi đã hứa tôi sẽ xem xét nó, vì vậy đây là câu trả lời của tôi:
Tôi tạo ra một cảnh quan e phải tương đương với phần của bạn, mã như sau:
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]);
Mã này giả định rằng bạn đang sử dụng ARC. Nếu không thêm
[imageView release];
ở cuối.
Sử dụng mã này các bản ghi giống như thế này:
[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}}
Như bạn có thể thấy các giới hạn luôn giữ nguyên. Điều gì thực sự thay đổi do xoay là khung, bởi vì một hình ảnh đã được quay bởi 30 ° C là tất nhiên rộng hơn nếu nó không được quay. Và kể từ khi điểm trung tâm đã được thiết lập để trung tâm thực tế của xem, nguồn gốc của khung hình cũng thay đổi (được đẩy sang trái và trên). Lưu ý rằng kích thước của hình ảnh chính nó không thay đổi. Tôi không sử dụng phép biến đổi tỷ lệ, vì kết quả có thể đạt được mà không cần mở rộng quy mô.
Nhưng để làm cho nó rõ ràng hơn đây là một số hình ảnh cho bạn (0 °, 30 ° 90 ° xoay): 
Họ đã trông khá giống nhau, phải không? Tôi đã vẽ các khung hình thực tế để làm rõ sự khác biệt giữa giới hạn và khung là gì. Người tiếp theo thực sự làm cho nó rõ ràng. Tôi đã xếp chồng lên tất cả các hình ảnh, xoay chúng theo các độ âm mà UIImageView được xoay, đưa ra kết quả sau: 
Vì vậy, bạn thấy khá thẳng về cách xoay hình ảnh. Bây giờ cho vấn đề của bạn mà bạn thực sự muốn khung ở lại giống nhau. Nếu bạn muốn khung cuối cùng có kích thước khung ban đầu của bạn (trong ví dụ này với chiều rộng là 200 và chiều cao là 250) thì bạn sẽ phải mở rộng khung kết quả. Nhưng điều này tất nhiên sẽ dẫn đến việc chia tỷ lệ hình ảnh mà bạn không muốn.Tôi thực sự nghĩ rằng một khung lớn hơn sẽ không phải là một vấn đề cho bạn - bạn chỉ cần biết rằng bạn phải đưa nó vào tài khoản vì vòng quay.
Tóm lại: không thể có UIImageView sẽ có cùng một khung hình sau khi xoay. Điều này là không thể cho bất kỳ UIView. Chỉ cần nghĩ về một hình chữ nhật. Nếu bạn xoay nó, nó sẽ không phải là một hình chữ nhật sau khi quay, phải không?
Tất nhiên bạn có thể đặt UIImageView bên trong một UIView khác sẽ có khung không xoay với chiều rộng là 200 và chiều cao là 250 nhưng sẽ chỉ ở bề ngoài, vì nó sẽ không thực sự thay đổi thực tế hình chữ nhật xoay có độ rộng và chiều cao khác so với hình chữ nhật ban đầu.
Tôi hy vọng điều này sẽ hữu ích. :)
Điều gì thực sự đang thay đổi? Bạn đang nói về khung của những thay đổi UIImageView? Hoặc nó là một thay đổi có thể nhìn thấy của kích thước hình ảnh? Bạn đã xác nhận thay đổi như thế nào? Nếu bạn xoay một khung nhìn, khung của nó sẽ luôn thay đổi, vì khung đại diện cho không gian của khung nhìn bên trong nó là superview. Các giới hạn của chế độ xem xoay sẽ giữ nguyên. –
là có bất kỳ mã nào trong touchesBegan: – MCKapur
@JohannesLumpe Nó thay đổi weidht của hình ảnh, và có lẽ chiều cao là tốt. Có, đó là thay đổi có thể nhìn thấy, bởi vì hình ảnh là nhận được nhỏ hơn nhiều, sau đó là trước khi quay, với cùng một kích thước cho ImageView. – User1234