2013-04-29 45 views
1

我有一個顯示圖像的應用程序。我有我的UIImageView顯示不同大小的各種圖像。使UIImageView保持當前大小而不拉伸圖像?

我想要做的是爲圖像視圖設置一個大小 - 稱之爲100x100。

  • 如果圖像視圖中放置了整體尺寸小於100x100的圖像,我希望圖像視圖能將圖像居中。
  • 如果整體圖像比視圖整體, 200x300,那麼我希望圖像視圖可以將圖像居中並將其縮小爲,然後將其放大,直到它恰好適合圖像視圖的範圍。

有沒有辦法在普通的UIImageView中做到這一點?我需要在某個地方做些魔術嗎?

回答

1

This answer最終幫了我。它有這樣的代碼:

- (CGSize) aspectScaledImageSizeForImageView:(UIImageView *)iv image:(UIImage *)im { 

    float x,y; 
    float a,b; 
    x = iv.frame.size.width; 
    y = iv.frame.size.height; 
    a = im.size.width; 
    b = im.size.height; 

    if (x == a && y == b) {   // image fits exactly, no scaling required 
     // return iv.frame.size; 
    } 
    else if (x > a && y > b) {   // image fits completely within the imageview frame 
     if (x-a > y-b) {    // image height is limiting factor, scale by height 
      a = y/b * a; 
      b = y; 
     } else { 
      b = x/a * b;    // image width is limiting factor, scale by width 
      a = x; 
     } 
    } 
    else if (x < a && y < b) {  // image is wider and taller than image view 
     if (a - x > b - y) {   // height is limiting factor, scale by height 
      a = y/b * a; 
      b = y; 
     } else {      // width is limiting factor, scale by width 
      b = x/a * b; 
      a = x; 
     } 
    } 
    else if (x < a && y > b) {  // image is wider than view, scale by width 
     b = x/a * b; 
     a = x; 
    } 
    else if (x > a && y < b) {  // image is taller than view, scale by height 
     a = y/b * a; 
     b = y; 
    } 
    else if (x == a) { 
    a = y/b * a; 
    b = y; 
    } else if (y == b) { 
     b = x/a * b; 
     a = x; 
    } 
    return CGSizeMake(a,b); 
} 
+0

這是很多代碼,您可以這樣做:if(myImage.size> 200x300)myImageView.contentMode = UIViewContentModeScaleAspectFit; – 2013-04-29 12:23:56

+0

您需要舍入或截斷a和b,以使它們都是整數。 – 2013-06-04 19:41:03

+0

@DavidH它爲我的目的工作得很好,隨時做任何必要的更改。 – Undo 2013-06-04 19:43:01

1

如果圖像較小,則將UIImageView添加到新的透明視圖並將其居中放置在該視圖中。如果較大,然後決定如何調整視圖大小(查看UIView中的resize選項),並使用該UIImageView。

+0

你能提供一些代碼嗎? – Undo 2013-04-29 00:38:57

+1

我正在回答我妻子的iPad。將視圖集中在另一個視圖中是微不足道的,不是嗎?你會看到UIView類ref中的resize選項,我忘記了屬性名稱。如果你真的需要更多的幫助/代碼可以明天上午做紐約時間。 – 2013-04-29 00:40:30

2

你可以用普通的UIImage視圖來做到這一點。對於較大的圖像,您希望將IB中的圖像視圖的模式設置爲Aspect Fit或Scale To Fill(取決於您是否希望寬高比保持不變),對於較小的圖像,將其設置爲Center。

您可以使用imageView的contentMode屬性在代碼中執行相同的操作。

+0

謝謝!我會試試看。 – Undo 2013-04-29 00:48:56