programing

UIButton의 배경 이미지로 사용할 UICollor에서 UIImage 만들기

yellowcard 2023. 4. 20. 20:46
반응형

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

반응형