调整UIImage的大小并更改UIImageView的大小

Ser*_*yov 21 iphone cocoa-touch objective-c uiimageview ios

我有这个UIImageView,我有它的最大高度和最大宽度的值.我想要实现的是我想拍摄图像(具有任何宽高比和任何分辨率)并且我希望它适合边框,因此图片不会超过它们,但它可以根据需要缩小它们.(图中标记为红色):

在此输入图像描述

现在图像正确地适合所需的大小,但我有两个担忧:1.UIImageView不等于调整大小的图像的大小,因此留下红色背景(我不想要那样)2.如果图像小于我的高度UIImageView没有调整到更小,它保持相同的高度.

这是我的代码,我知道它的错误:

UIImage *actualImage = [attachmentsArray lastObject];
UIImageView *attachmentImageNew = [[UIImageView alloc] initWithFrame:CGRectMake(5.5, 6.5, 245, 134)];
attachmentImageNew.image = actualImage;
attachmentImageNew.backgroundColor = [UIColor redColor];
attachmentImageNew.contentMode = UIViewContentModeScaleAspectFit;
Run Code Online (Sandbox Code Playgroud)

那么,如何动态改变大小不仅的UIImageView.image,但整体的UIImageView,从而使得它的尺寸完全可调的内容.任何帮助将不胜感激,谢谢!

Mik*_*ail 33

当您获得已调整大小的图像的宽度和高度在UIViewContentModeScaleAspectFit之后获取已调整大小的图像的宽度时,您可以调整imageView的大小:

imageView.frame = CGRectMake(0, 0, resizedWidth, resizedHeight);
imageView.center = imageView.superview.center;
Run Code Online (Sandbox Code Playgroud)

我没有检查它是否有效,但我认为一切都应该没问题


Raj*_*071 23

- (UIImage *)image:(UIImage*)originalImage scaledToSize:(CGSize)size
{
    //avoid redundant drawing
    if (CGSizeEqualToSize(originalImage.size, size))
    {
        return originalImage;
    }

    //create drawing context
    UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);

    //draw
    [originalImage drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];

    //capture resultant image
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //return image
    return image;
}
Run Code Online (Sandbox Code Playgroud)


Joe*_*ind 7

这是使用扩展的Rajneesh071答案的Swift等价物

UIImage {
  func scaleToSize(aSize :CGSize) -> UIImage {
    if (CGSizeEqualToSize(self.size, aSize)) {
      return self
    }

    UIGraphicsBeginImageContextWithOptions(aSize, false, 0.0)
    self.drawInRect(CGRectMake(0.0, 0.0, aSize.width, aSize.height))
    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return image
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let image = UIImage(named: "Icon")
item.icon = image?.scaleToSize(CGSize(width: 30.0, height: 30.0))
Run Code Online (Sandbox Code Playgroud)