2012-01-02 13 views
15

私はコンテンツモードのUIImageViewを持っていますアスペクトフィットのサイズは220x155です。私は異なる解像度で異なる画像を動的に挿入していますが、UIImageViewのサイズよりも大きいものです。コンテンツモードがAspect Fitに設定されているため、画像はUIImageViewに適合する比率に対してスケーリングされます。UIImageView:サイズを画像サイズに変更しますか?

私の問題は、UIImageView内の画像が220x100にスケールされている場合、私の要素間のスペースを避けるためにUIImageViewを高さ155から100に縮小したいと思います。

どうすればいいですか?

+0

私は同じ問題が中央にイメージが設定されていますが、上下のスペースを取得します。どうすれば解決できますか?助けてください – Hiren

答えて

28

:あなたが試みることができる実際のサイズを取得するには

(態様を保つために同じ比率を使用して)

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

チェックスケーリング高

originalSizeは{0、0}である場合は、この方法ブレーク:マイケルの回答に基づいて
float scaledHeight=imgSize.height*ratio; 
if(scaledHeight < yourImageView.frame.size.height) 
{ 
    //update height of your imageView frame with scaledHeight 
} 
+0

私を大いに助けました。ありがとう –

0

最終編集:

質問に間違いがあるようです。画像サイズを取得することによって:幅に

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

計算スケール比率私は右のあなたを得た場合、それはこのようなものになるだろう

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に挿入すると、UIImageViewに合わせてサイズが220x100に変更されます。あなたのコードはUIImageViewの高さを200に設定しますが、私はUIImageViewが画像を拡大縮小した後の画像の高さを知りたいと思います。 – dhrm

+0

画像の高さが画像の現在の最大高さよりも小さい場合は、常に高さを確認して適用し、このような変更を適用するだけです。 –

+0

申し訳ありませんが、私はあなたの問題を理解しているかどうかはわかりません。あなたのコードは、私のイメージのサイズにUIImageViewのサイズを変更します - それは私が望むものではありません。私のイメージは私の220x115ボックスに収まるようにしたいです。しかし、イメージの比率が私の220x115ボックスの比率に似ていない場合、UIImageViewの上下に空白を与えるよりも広い場合があります。これを避けるために、UIImageViewの高さをイメージのサイズを縮小した高さに縮小したいと思います。 – dhrm

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

私は私のプロジェクトでこの機能を使用しており、うまくいきます。 –

3

編集スティーブンStefanikの答えのためです。おそらくこれらの変更を考慮してください

-(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; 
} 
関連する問題