iOS 9.3 中的 UIImageView 如何渲染 UIImage?

Posted

技术标签:

【中文标题】iOS 9.3 中的 UIImageView 如何渲染 UIImage?【英文标题】:How UIImageView in iOS 9.3 rendering an UIImage? 【发布时间】:2016-04-20 10:27:45 【问题描述】:

ios 9.3 中,我有一个方形 UIImageView(例如 200x200),我尝试用cornerRadius 分配一个 UIImage(1x1 像素),然后 UIImageView 变成一个圆形。我认为问题来自渲染时的 UIImageView。

photoImageView.image = [UIImage imageNamed:@"iphone.jpeg"]; // 1px height x 1 px width
photoImageView.contentMode = UIViewContentModeScaleToFill;
// It can fixed with the below code
// photoImageView.image = [[UIImage imageNamed:@"iphone.jpeg"] stretchableImageWithLeftCapWidth:2 topCapHeight:2];
// photoImageView.contentMode = UIViewContentModeScaleAspectFill;
photoImageView.layer.cornerRadius = 20.0;
photoImageView.layer.masksToBounds = YES;

如果我将 contentMode 更改为 ScaleAspectFill 或 ScaleToFill,或者更改 UIImage (2x2) 的大小,或者 iOS 版本低于 9.3,它会像我预期的那样工作。

http://i.imgur.com/kM36GPW.png

项目:download the sample projec

红色:真实结果。 绿色:预期。

有人能解释一下原因吗?谢谢。

【问题讨论】:

设置 photoImageView.clipsToBounds = YES; 【参考方案1】:

通过更改拐角半径值来尝试

photoImageView.image = [UIImage imageNamed:@"iphone"]; // 1px height x 1 px width
photoImageView.contentMode = UIViewContentModeScaleToFill;
photoImageView.layer.cornerRadius = 5.0;
photoImageView.layer.masksToBounds = YES;

【讨论】:

即使我将cornerRadius设置为1,它仍然呈现圆形。我可以解决问题,但我不知道原因,我只需要知道问题发生的原因。【参考方案2】:

设置 maskToBounds=YES

 photoImageView.layer.masksToBounds=YES;

并设置imageview模式Aspect Fill或Aspect Fit。

【讨论】:

感谢米特什。我不打算得到一个圆圈UIImageView,但我得到了一个圆圈。而且我不知道为什么我有一个圈子? 为你的 UIimageView 设置另一个图像并检查它。 photoImageView.image = [UIImage imageNamed:@"1.jpg"]; photoImageView.layer.cornerRadius = 20.0; photoImageView.layer.masksToBounds = YES;我检查你的项目和它的工作。看到这个。在你的项目中,你设置了 clipstobound=yes 所以 imageview 变成了圆形。 嗨 Mitesh,“1.jpg”的尺寸是多少?你会在 iOS 9.3 上尝试 1x1 图像吗? 是的,我在 imageview 中设置了 1x1 图像。如果视图模式是按比例填充,那么 imageview 会变成一个圆圈,因此根据需要将模式设置为 Aspect fill 或 Aspect Fit 是的,就是这样。我的问题是:为什么视图模式是ScaleToFill,然后ImageView变成一个圆圈。

以上是关于iOS 9.3 中的 UIImageView 如何渲染 UIImage?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Swift iOS 中检测 UIImageView 中的更改图像

ios(9.3) 中的核心数据在哪里?

IOS将UIVIew中的UIImageView扁平化为单个UIView [重复]

如何支持 iOS 9.3 和 watchOS 2.2 的多个手表

如何在 iOS 9.3+ 上从网页打开 Safari 的设置

如何在Swift中初始化iOS 10和iOS 9.3的NSManagedObject子类