好的我答應我會考慮它,所以這裏是我的答案:
我創建了一個場景e這應該與您的代碼相當,代碼如下:
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中,它將有一個非旋轉的框架,寬度爲200,高度爲250,但這只是膚淺的,因爲它不會真的改變這個事實:旋轉的矩形與原始的寬度和高度不同。
我希望這會有所幫助。 :)
什麼是實際上改變?你是否在談論UIImageView的框架更改?或者它是圖像大小的可見變化?你是如何確認變化的?如果你旋轉一個視圖,它的框架總是會改變,因爲框架代表了視圖的超級視圖內的空間。旋轉視圖的邊界將保持不變。 –
touchesBegan有沒有任何代碼: – MCKapur
@JohannesLumpe它改變了Image的weidht,也可能是高度。是的,它是可見的變化,因爲圖像越來越小,然後在旋轉之前,用相同的ImageView給定大小。 – User1234