UIButton ImageView 仅显示颜色填充

Posted

技术标签:

【中文标题】UIButton ImageView 仅显示颜色填充【英文标题】:UIButton ImageView showing only a color fill 【发布时间】:2014-06-23 22:58:22 【问题描述】:

我正在将 UIButton 的 ImageView.Image 属性设置为从 ImagePickerController 捕获的图像。在我的应用程序中,图像被捕获并带有边框。图像已保存,我正在将图像加载到按钮中。问题是,按钮只显示一个蓝色圆圈,而不是里面的图像......这似乎只发生在按钮上。

这是我的代码,用于对图像进行四舍五入并设置边框:

-(UIImage *)makeRoundedImage:(UIImage *) image
                  radius: (float) radius;

CALayer *imageLayer = [CALayer layer];
imageLayer.frame = CGRectMake(0, 0, image.size.width, image.size.height);
imageLayer.contents = (id) image.CGImage;
imageLayer.backgroundColor = [[UIColor clearColor] CGColor];

imageLayer.masksToBounds = YES;
imageLayer.cornerRadius = radius;
imageLayer.borderWidth = 40;
UIColor *ios7BlueColor = [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
imageLayer.borderColor = ios7BlueColor.CGColor;

UIGraphicsBeginImageContext(image.size);
[imageLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

return roundedImage;

下面是我设置按钮图像的方式:(player.playerImage 是一个带有保存图像路径的字符串)

-(void)ViewController:(UIViewController *)sender didUpdatePlayerImage:(NSString *)playerImagePath


player.playerImage = playerImagePath;
[_editImageButton setImage:[UIImage imageWithContentsOfFile:player.playerImage] forState:UIControlStateNormal];

这是对 UIButton 的 ImageView 实现的限制还是我遗漏了什么?

【问题讨论】:

请阅读 UIButton 类参考中链接的名为“Buttons”的文档。它将解释为什么您会得到蓝色图像以及如何处理它。 谢谢。这让我到了正确的地方。我必须将 UIRenderingMode 设置为始终原始... 【参考方案1】:

您实际上并没有将原始图像写入上下文。

尝试以下方法:

UIGraphicsBeginImageContext(image.size);
[image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height)];
[imageLayer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *roundedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

这应该将图像渲染到上下文中,然后是您的图层。

【讨论】:

嗯。我没有看到。而且,当我从另一个视图控制器将图像读入 UIImageView 时,它会正确显示。图像似乎可以正确保存,但 UIButton.ImageView 没有正确呈现它...

以上是关于UIButton ImageView 仅显示颜色填充的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UITableCellView 中设置 imageView 属性以仅显示背景颜色?

使用imageView外观禁用UIButton而不将isEnabled设置为false

iOS:如果背景图像与按钮颜色相同,则更改我的 UIButton 的颜色

如何仅从单面绘制带有色调颜色和圆角的 UIButton

摆脱 UITableViewCell 中 UIButton 上的 imageView 色调

UIButton ImageView 内容模式不起作用