私はこのような色の画像を作成しています:
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();
そして、それをボタンの背景画像として使用します。
[resultButton setBackgroundImage:img forState:UIControlStateNormal];
これはredColorを使用するとうまく機能しますが、RGBカラーを使用したい(コメント行に示されているように)。 RGBカラーを使用する場合、ボタンの背景は変更されません。
私は何が欠けていますか?
ボタンの背景色を設定し、状態を設定できるように、UIButtonの周りにカテゴリを作成しました。これは便利かもしれません。
@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;
}
これは、今月私がオープンソースとして提供している一連のヘルパーカテゴリの一部になります。
スイフト2.2
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
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!
}
}
使用
let img = UIImage.from(color: .black)
Xamarin.iOSソリューション
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;
}
ARCを使用していますか?ここでの問題は、適用しようとしているUIColor
オブジェクトへの参照がないことです。 CGColor
はそのUIColor
によって支えられていますが、UIColor
を使用する機会がある前に、ARCはCGColor
の割り当てを解除します。
最も明確な解決策は、objc_precise_lifetime
属性を持つUIColor
を指すローカル変数を持つことです。
IColorと短いARCライフタイムに関するこの記事 でこの正確なケースの詳細を読むか、 objc_precise_lifetime
属性 の詳細を取得できます。
すべての値にドットを追加します。
[[UIColor colorWithRed:222./255. green:227./255. blue: 229./255. alpha:1] CGColor]) ;
それ以外の場合、floatをintで除算しています。
227./255の255は整数として認識され、除算は常に0を返すと思います
コードは正常に機能します。 IconfactoryのxScope でRGBカラーを確認できます。 [UIColor whiteColor]
と比較してください。
CGContextSetFillColorWithColor(context,[[UIColor colorWithRed:(255/255.f) green:(0/255.f) blue: (0/255.f) alpha:1] CGColor]);