首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从UIColor创建UIImage以用作UIButton的背景图像

从UIColor创建UIImage以用作UIButton的背景图像
EN

Stack Overflow用户
提问于 2011-06-28 01:14:57
回答 7查看 101.7K关注 0票数 159

我正在创建一个彩色图像,如下所示:

代码语言:javascript
复制
CGRect rect = CGRectMake(0, 0, 1, 1);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context,
                                   [[UIColor redColor] CGColor]);
//  [[UIColor colorWithRed:222./255 green:227./255 blue: 229./255 alpha:1] CGColor]) ;
CGContextFillRect(context, rect);
UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

然后将其用作按钮的背景图像:

代码语言:javascript
复制
[resultButton setBackgroundImage:img forState:UIControlStateNormal];

使用redColor效果很好,但是我想使用RGB颜色(如注释行所示)。当我使用RGB颜色时,按钮的背景没有改变。

我遗漏了什么?

EN

回答 7

Stack Overflow用户

发布于 2014-07-08 00:43:18

我围绕UIButton创建了一个类别,以便能够设置按钮的背景色和状态。您可能会发现这很有用。

代码语言:javascript
复制
@implementation  UIButton (ButtonMagic)

- (void)setBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state {
    [self setBackgroundImage:[UIButton imageFromColor:backgroundColor] forState:state];
}

+ (UIImage *)imageFromColor:(UIColor *)color {
    CGRect rect = CGRectMake(0, 0, 1, 1);
    UIGraphicsBeginImageContext(rect.size);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetFillColorWithColor(context, [color CGColor]);
    CGContextFillRect(context, rect);
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return image;
}

这将是我这个月开源的一组助手类别的一部分。

Swift 2.2

代码语言:javascript
复制
extension UIImage {
static func fromColor(color: UIColor) -> UIImage {
    let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()
    CGContextSetFillColorWithColor(context, color.CGColor)
    CGContextFillRect(context, rect)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img
  }
}

Swift 3.0

代码语言:javascript
复制
extension UIImage {
    static func from(color: UIColor) -> UIImage {
        let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
        UIGraphicsBeginImageContext(rect.size)
        let context = UIGraphicsGetCurrentContext()
        context!.setFillColor(color.cgColor)
        context!.fill(rect)
        let img = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return img!
    }
}

用作

代码语言:javascript
复制
let img = UIImage.from(color: .black)
票数 150
EN

Stack Overflow用户

发布于 2015-04-12 10:28:35

Xamarin.iOS解决方案

代码语言:javascript
复制
 public UIImage CreateImageFromColor()
 {
     var imageSize = new CGSize(30, 30);
     var imageSizeRectF = new CGRect(0, 0, 30, 30);
     UIGraphics.BeginImageContextWithOptions(imageSize, false, 0);
     var context = UIGraphics.GetCurrentContext();
     var red = new CGColor(255, 0, 0);
     context.SetFillColor(red);
     context.FillRect(imageSizeRectF);
     var image = UIGraphics.GetImageFromCurrentImageContext();
     UIGraphics.EndImageContext();
     return image;
 }
票数 14
EN

Stack Overflow用户

发布于 2012-06-27 19:57:41

你在使用ARC吗?这里的问题是,您没有对您试图应用的UIColor对象的引用;CGColor由该UIColor支持,但是在您有机会使用UIColor之前,ARC会释放该CGColor

最清晰的解决方案是让一个局部变量通过objc_precise_lifetime属性指向UIColor

您可以在this article about UIColor and short ARC lifetimes上阅读有关此案例的更多信息,或获取有关the objc_precise_lifetime attribute的更多详细信息。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6496441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档