UIButton의 배경 이미지로 사용할 UIColor에서 UIImage 만들기
다음과 같이 컬러 이미지를 만들고 있습니다.
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
}
}
스위프트 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;
}
Are you using ARC? The problem here is that you don't have a reference to the UIColor
object that you're trying to apply; the CGColor
is backed by that UIColor
, but ARC will deallocate the UIColor
before you have a chance to use the CGColor
.
The clearest solution is to have a local variable pointing to your UIColor
with the objc_precise_lifetime
attribute.
You can read more about this exact case on this article about UIColor and short ARC lifetimes or get more details about the objc_precise_lifetime
attribute.
Add the dots to all values:
[[UIColor colorWithRed:222./255. green:227./255. blue: 229./255. alpha:1] CGColor]) ;
Otherwise, you are dividing float by int.
I suppose that 255 in 227./255 is perceived as an integer and divide is always return 0
Your code works fine. You can verify the RGB colors with Iconfactory's xScope. Just compare it to [UIColor whiteColor]
.
CGContextSetFillColorWithColor(context,[[UIColor colorWithRed:(255/255.f) green:(0/255.f) blue: (0/255.f) alpha:1] CGColor]);
'IT박스' 카테고리의 다른 글
Git의 하위 디렉토리를 확인 하시겠습니까? (0) | 2020.06.08 |
---|---|
InitializeComponent ()의 기능은 무엇이며 WPF에서 어떻게 작동합니까? (0) | 2020.06.08 |
SVN : 파일을 "커밋하지 않음"으로 표시하는 방법이 있습니까? (0) | 2020.06.08 |
iOS 5와 하위 호환성을 유지하면서 iOS 6에서 자동 레이아웃 활성화 (0) | 2020.06.08 |
git rebase fatal : 단일 개정이 필요했습니다 (0) | 2020.06.08 |