【问题标题】:Make UIImageView stay at current size without stretching image?使 UIImageView 保持在当前大小而不拉伸图像?
【发布时间】:2013-04-29 00:25:51
【问题描述】:

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

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

  • 如果将总体尺寸小于 100x100 的图像放入图像视图中,我希望图像视图使图像居中。
  • 如果图像整体大于视图,例如200x300,然后我希望图像视图将图像居中并缩小直到它刚好适合图像视图的边界。

有没有办法在普通的 UIImageView 中做到这一点?我需要在某处施展魔法吗?

【问题讨论】:

    标签: ios uiimageview uiimage scaling


    【解决方案1】:

    您可以使用普通的 UIImage 视图来执行此操作。对于较大的图像,您希望在 IB 中将图像视图的 Mode 设置为 Aspect Fit 或 Scale To Fill(取决于您是否希望纵横比保持不变),对于较小的图像,将其设置为 Center。

    您可以使用 imageView 的 contentMode 属性在代码中做同样的事情。

    【讨论】:

      【解决方案2】:

      如果图像更小,则将 UIImageView 添加到新的透明视图并将其居中放置在该视图中。如果更大,则决定如何调整视图大小(查看 UIView 中的调整大小选项),然后只使用那个 UIImageView。

      【讨论】:

      • 我正在用我妻子的 iPad 接听电话。在另一个视图中居中是微不足道的,不是吗?您将在 UIView 类参考中看到调整大小选项,我忘记了属性名称。如果您真的需要更多帮助/代码可以在明天上午纽约时间完成。
      【解决方案3】:

      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);
      }
      

      【讨论】:

      • 这有很多代码,你可以这样: if(myImage.size > 200x300) myImageView.contentMode = UIViewContentModeScaleAspectFit;
      • 您需要将 a 和 b 舍入或截断,使它们都是整数。
      • @DavidH 它对我来说工作得很好,请随时进行必要的更改。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 2018-12-04
      • 1970-01-01
      相关资源
      最近更新 更多