1

画像が表示されるアプリがあります。にさまざまなサイズのさまざまな画像が表示されていUIImageViewます。

私がやりたいのは、画像ビューのサイズを設定することです-それを100x100と呼びます。

  • 全体のサイズが 100x100 未満の画像が画像ビューに配置されている場合、画像ビューが画像を中央に配置するようにします。
  • 200x300 など、全体的にビューよりも大きい画像の場合、画像ビューで画像を中央に配置し、画像ビューの境界内に収まるまで縮小します。

通常のUIImageViewでこれを行う方法はありますか? どこかで魔法をかける必要がありますか?

4

3 に答える 3

2

通常の UIImage ビューでこれを行うことができます。大きい画像の場合は、IB の画像ビューのモードを Aspect Fit または Scale To Fill に設定し (縦横比を同じにするかどうかによって異なります)、小さい画像の場合は Center に設定します。

imageView の contentMode プロパティを使用して、コードで同じことを行うことができます。

于 2013-04-29T00:42:42.927 に答える
1

この答えは最終的に私を助けました。次のコードがありました。

- (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);
}
于 2013-04-29T03:22:47.420 に答える