web-dev-qa-db-ja.com

UIImageView:サイズを画像サイズに変更しますか?

UIImageViewとコンテンツモードアスペクトフィットサイズ220x155を使用しています。さまざまな解像度でさまざまな画像を動的に挿入していますが、すべてUIImageViewのサイズよりも大きくなっています。コンテンツモードがAspect Fitに設定されているため、UIImageViewに収まるように、比率を基準に画像が拡大縮小されます。

私の問題は、たとえば、UIImageView内の画像が220x100にスケーリングされている場合、UIImageViewを155の高さから100に縮小して、要素間のスペースを回避したいです。

これどうやってするの?

15
dhrm

私があなたを正しく理解していれば、それは次のようなものです:画像サイズを取得する:

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
}
28
Michał Zygar

マイケルの答えに基づいて、ここに完全な方法があります

+ (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;
}
20
Steven Stefanik

Steven 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;
}
3
mrplants

最終編集:

その質問を誤解しているようです。

実際のサイズを取得するには、次のことを試してください。

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
Ignacio Inglese