将 UIImage 调整为 UIImageView
Posted
技术标签:
【中文标题】将 UIImage 调整为 UIImageView【英文标题】:Adjust UIImage into UIImageView 【发布时间】:2013-07-22 09:59:18 【问题描述】:我正在尝试将图像放入 uiimageview,图像被动态下载和加载,并且只有一种分辨率可用于 ios 和 android 应用程序。
所以,我需要图像来保持纵横比和缩放到宽度,我将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】:UIView
是UIImageView
的超类,有一个属性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的主要内容,如果未能解决你的问题,请参考以下文章
UIImage 未根据 UIImageView 大小宽度和高度调整大小
swift UIImage使用UIImageView调整方面填充和裁剪