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将UIVIew中的UIImageView扁平化为单个UIView [重复]
如何支持 iOS 9.3 和 watchOS 2.2 的多个手表