使UIImageView保持当前大小而不拉伸图像?

时间:2013-04-29 00:25:52

标签: ios uiimageview uiimage scaling

我有一个应用程序,其中显示图像。我在UIImageView显示了不同尺寸的各种图像。

我想要做的是设置图像视图的大小 - 称之为100x100。

  • 如果图片视图中放置的图片尺寸总体上小于100x100,我希望图片视图以图片为中心。
  • 如果整体大于的图片不是视图,例如200x300,然后我希望图像视图使图像居中并将其缩小向下,直到它恰好适合图像视图的范围。

有没有办法在普通的UIImageView中执行此操作?我需要在某个地方做一些魔法吗?

3 个答案:

答案 0 :(得分:2)

您可以使用普通的UIImage视图执行此操作。对于较大的图像,您需要将图像视图的IB模式设置为宽高比适合或缩放至填充(取决于您是否希望宽高比保持不变),对于较小的图像,将其设置为中心。

您可以使用imageView的contentMode属性在代码中执行相同的操作。

答案 1 :(得分:1)

如果图像较小,则将UIImageView添加到新的透明视图中,并将其置于该视图中。如果更大,则决定如何调整视图大小(查看UIView中的resize选项),并使用该UIImageView。

答案 2 :(得分: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);
}