2012-01-02 64 views
15

我有一個UIImageView內容模式Aspect Fit大小爲220x155。我以不同的分辨率動態插入不同的圖像,但都大於UIImageView的大小。由於內容模式設置爲Aspect Fit,圖像將根據比例進行縮放以適合UIImageView。UIImageView:將大小更改爲圖片大小?

我的問題是,如果例如UIImageView內的圖像縮放到220x100,我想UIImageView從155的高度縮小到100,以避免我的元素之間的空間。

我該怎麼做?

+0

我有一個相同的問題圖像設置在中心,但獲得上下空間。我該如何解決它?請幫助我 – Hiren 2012-10-03 14:48:31

回答

28

如果我給你的權利,這將是這樣的:在寬度

UIImage * img = [UIImage imageNamed:@"someImage.png"]; 
CGSize imgSize = img.size; 

計算規模比:得到的圖像尺寸

float ratio=yourImageView.frame.size.width/imgSize.width; 

檢查縮放高度(使用相同的比率以保持寬高比)

float scaledHeight=imgSize.height*ratio; 
if(scaledHeight < yourImageView.frame.size.height) 
{ 
    //update height of your imageView frame with scaledHeight 
} 
+0

非常幫助我。謝謝 – 2013-09-06 13:31:28

0

Last edit:

看來我誤解了這個問題。

要獲得實際大小,你可以嘗試:

CGSize imageSize = img.size; 
CGSize viewSize = imageView.frame.size; 
CGSize actualSize; 

if (imageSize.width > imageSize.height) { 
    actualSize.width = imageSize.width > viewSize.width ? viewSize.width : imageSize.width; 

    actualSize.height = imageSize.height * actualSize.width/imageSize.width; 
} 
else { 
    actualSize.height = imageSize.height > viewSize.height ? viewSize.height : imageSize.height; 

    actualSize.width = imageSize.width * actualSize.height/imageSize.height; 
} 
+0

好吧,那是行不通的。假設我的圖像是440x200。當這個圖像被插入到我的ImageView中時,它的大小將被更改爲220x100以適應UIImageView。你的代碼會將UIImageView的高度設置爲200,而我想在UIImageView縮放圖像後知道圖像的高度。 – dhrm 2012-01-02 14:16:57

+0

您可以隨時檢查高度,只有在圖像高度小於當前圖像的最大高度時才應用此高度,然後才應用此類更改。 – 2012-01-02 14:21:29

+0

對不起,但我不確定你瞭解我的問題。您的代碼會將UIImageView的大小更改爲我的圖像大小 - 這不是我想要的。我希望我的圖像適合我的220x115盒子。但是當圖像的比例不像我的220x115盒子的比例時,有時會比UIImageView的頂部和底部的白色空間更高。爲了避免這種情況,我想將UIImageView的高度縮小到它縮小圖像的高度。 – dhrm 2012-01-02 14:31:49

20

基於邁克爾的答案,這裏是一個完整的方法

+ (CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize 
{ 
    float widthScale = 0; 
    float heightScale = 0; 

    widthScale = boxSize.width/originalSize.width; 
    heightScale = boxSize.height/originalSize.height; 

    float scale = MIN(widthScale, heightScale); 

    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale); 

    return newSize; 
} 
+0

我在我的項目中使用這個功能,它運作良好。 – 2012-09-09 23:51:43

3

編輯爲史蒂芬Stefanik的回答是:這種方法休息時originalSize是{0,0}。也許考慮這些變化

-(CGSize)makeSize:(CGSize)originalSize fitInSize:(CGSize)boxSize 
{ 
    if (originalSize.height == 0) { 
     originalSize.height = boxSize.height; 
    } 
    if (originalSize.width == 0) { 
     originalSize.width = boxSize.width; 
    } 

    float widthScale = 0; 
    float heightScale = 0; 

    widthScale = boxSize.width/originalSize.width; 
    heightScale = boxSize.height/originalSize.height; 

    float scale = MIN(widthScale, heightScale); 

    CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale); 

    return newSize; 
}