将 UIImage 调整为 UIImageView

Posted

技术标签:

【中文标题】将 UIImage 调整为 UIImageView【英文标题】:Adjust UIImage into UIImageView 【发布时间】:2013-07-22 09:59:18 【问题描述】:

我正在尝试将图像放入 uiimageview,图像被动态下载和加载,并且只有一种分辨率可用于 iosandroid 应用程序。

所以,我需要图像来保持纵横比和缩放到宽度,我将UIImageView 内容模式设置为 UIViewContentModeScaleAspectFill,但是图片居中,所以顶部和底部都超出屏幕,图像将被设计为不需要底部。

如何将图像对齐到左上角?

UIImageView 也可以缩放到我的宽度吗?或者我该怎么做?

提前致谢。

编辑:

我尝试了setcliptobounds 并将图像切割成 imageview 大小,这不是我的问题。

UIViewContentModeTopLeft 运行良好,但现在我无法申请UIViewContentModeScaleAspectFill,或者我可以同时申请吗?

【问题讨论】:

UIViewContentModeScaleAspectFill not clipping的可能重复 使用 UIViewContentModeTopLeft 使用这个 [imageView setClipsToBounds:YES]; 【参考方案1】:

您可以缩放图像以适应图像视图的宽度。

您可以使用UIImage 上的类别来创建具有选定宽度的新图像。

@interface UIImage (Scale)

-(UIImage *)scaleToWidth:(CGFloat)width;

@end

@implementation UIImage (Scale)

-(UIImage *)scaleToWidth:(CGFloat)width

    UIImage *scaledImage = self;
    if (self.size.width != width) 
        CGFloat height = floorf(self.size.height * (width / self.size.width));
        CGSize size = CGSizeMake(width, height)

        // Create an image context
        UIGraphicsBeginImageContext(size);

        // Draw the scaled image
        [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];

        // Create a new image from context
        scaledImage = UIGraphicsGetImageFromCurrentImageContext();

        // Pop the current context from the stack
        UIGraphicsEndImageContext();
    
    // Return the new scaled image
    return scaledImage;


@end

这样你就可以用它来缩放图像

UIImage *scaledImage = [originalImage scaleToWidth:myImageView.frame.size.width];
myImageView.contentMode = UIViewContentModeTopLeft;
myImageView.image = scaledImage;

【讨论】:

这是缩放宽度而不是高度,我需要保持纵横比。 我误解了你想要达到的目标。我编辑了 -scaleToWidth:,现在应该是正确的【参考方案2】:

UIViewUIImageView 的超类,有一个属性contentMode。 您可以使用以下常量来对齐图像的左上角。

UIViewContentModeTopLeft

Aligns the content in the top-left corner of the view.

保持纵横比

UIViewContentModeScaleAspectFit

Scales the content to fit the size of the view by maintaining the aspect ratio. Any remaining area of the view’s bounds is transparent.

【讨论】:

很好,第一个问题解决了,那么如何将图像缩放到 UIImageView 宽度? 如果你想保持纵横比,你不能这样做。为什么不通过执行 image.size.width 来获得图像宽度;并使用它来更改 UIImageView 的宽度。比您不必拉伸图像。 图片会比屏幕大【参考方案3】:

您不能同时使用 UIImageView 对齐和保持纵横比,但是 UIImageView 有一个很棒的子类,名为 UIImageViewAligned,可以让您实现这一点。你可以在 github 上从here找到这个项目。 你需要做的如下:

    首先将 UIImageViewAligned-master/UIImageViewAligned/ 中的标头和实现复制到您的项目中 将 IB 对象库中的 ImageView 对象插入到您的视图中。 在“实用工具”窗格中的 Identity Inspector 中将 ImageView 的类更改为 UIImageViewAligned 然后在 Identity Inspector 的 User Defined Runtime Attributes 部分中添加所需的对齐方式作为关键路径

就是这样。运行你的项目以确保它。

【讨论】:

以上是关于将 UIImage 调整为 UIImageView的主要内容,如果未能解决你的问题,请参考以下文章

更改 UIImageView 或 UIImage 宽度

UIImage 未根据 UIImageView 大小宽度和高度调整大小

swift UIImage使用UIImageView调整方面填充和裁剪

UIImage 调整大小并裁剪以适合

防止 UITableViewCell 的 UIImageView 调整异步加载的 UIImage 的大小

UIImageView 未调整为圆形,UILabel 未在 StackView 和自定义集合单元中调整大小