UIButton의 배경 이미지로 사용할 UICollor에서 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];
이것은 red Color를 사용하면 잘 동작하지만, 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)
자마린OS 솔루션
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
단, ARC는 이 명령어의UIColor
사용할 기회가 생기기 전에CGColor
.
가장 명확한 해결책은 로컬 변수가 다음을 가리키도록 하는 것입니다.UIColor
와 함께objc_precise_lifetime
기여하다.
UICollor 및 짧은 ARC 수명에 대한 자세한 내용은 이 문서에서 확인하거나 속성에 대한 자세한 내용을 볼 수 있습니다.
모든 값에 점을 추가합니다.
[[UIColor colorWithRed:222./255. green:227./255. blue: 229./255. alpha:1] CGColor]) ;
그렇지 않으면 플로트를 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]);
언급URL : https://stackoverflow.com/questions/6496441/creating-a-uiimage-from-a-uicolor-to-use-as-a-background-image-for-uibutton
'programing' 카테고리의 다른 글
다른 테이블에 없는 행 선택 (0) | 2023.04.20 |
---|---|
SO_REUSEADDR과 SO_REUSEPORT의 차이점은 무엇입니까? (0) | 2023.04.20 |
Excel 매크로(vba)의 restful API를 사용하려면 어떻게 해야 합니까? (0) | 2023.04.20 |
최소 날짜(1753년 1월 1일)를 반환하는 SQL Server 함수 (0) | 2023.04.20 |
섬네일 이미지 생성 (0) | 2023.04.20 |