(iOS - Objective-C) HexString & UIColor 상호 회전

3670 단어
2018.9.19
간단한 매크로 정의
매크로 정의는 16진수 색상 값을 해당 UIColor 객체로 직접 변환할 수 있습니다.
#define UIColorFromRGBA(rgbValue, alpha) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:alpha]

HexString 회전 UIColor
접두사 0x, # 표지 지원, 투명도 8자리 길이 문자열 지원, 투명도 없는 6자리 문자열 지원, 코드를 한 번 훑어보면 알 수 있습니다.음, 쉽게 UIColor의 분류에 기록하는 것을 권장합니다.
+ (UIColor *)ColorWithHexString:(NSString *)color {
    return [UIColor ColorwithHexString:color Alpha:-1];
}

알파 값이 0보다 작으면 현재 변환 색상의 투명도를 사용자화합니다.
+ (UIColor *)ColorwithHexString:(NSString *)color Alpha:(CGFloat)alpha {
    NSString *cString = [[color stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] uppercaseString];
    // String should be 6 or 8 characters
    if ([cString length] < 6) {
        return [UIColor clearColor];
    }

    // strip 0X if it appears
    if ([cString hasPrefix:@"0X"])
        cString = [cString substringFromIndex:2];
    if ([cString hasPrefix:@"#"])
        cString = [cString substringFromIndex:1];
    if ([cString length] != 8 && [cString length]!=6)
        return [UIColor clearColor];

    CGFloat insideAlpha = 1.0f;
    if ([cString length]==8) {
        NSString *aString = [cString substringWithRange:NSMakeRange(0, 2)];
        unsigned int a;
        [[NSScanner scannerWithString:aString] scanHexInt:&a];
        insideAlpha = (float)a / 255.0f;
        cString =  [cString substringWithRange:NSMakeRange(2, 6)];
    }
    if (alpha>0) {
        insideAlpha = alpha;
    }

    // Separate into r, g, b substrings
    NSRange range;
    range.location = 0;
    range.length = 2;

    //r
    NSString *rString = [cString substringWithRange:range];

    //g
    range.location = 2;
    NSString *gString = [cString substringWithRange:range];

    //b
    range.location = 4;
    NSString *bString = [cString substringWithRange:range];

    // Scan values
    unsigned int r, g, b;
    [[NSScanner scannerWithString:rString] scanHexInt:&r];
    [[NSScanner scannerWithString:gString] scanHexInt:&g];
    [[NSScanner scannerWithString:bString] scanHexInt:&b];

    return [UIColor colorWithRed:((float) r / 255.0f) green:((float) g / 255.0f) blue:((float) b / 255.0f) alpha:insideAlpha];
}

UIColor HexString
변환된 문자열은 어떠한 접두사도 포함하지 않습니다. 필요하면 0x, # 등 관용 접두사를 직접 연결하십시오.또한HasAlpha 매개 변수는 UIColor로 전송되는 투명도도 결과 문자열에 계산할지 여부를 결정하는데 마찬가지로 코드를 한 번 훑어보면 알 수 있다.음, 쉽게 UIColor의 분류에 기록하는 것을 권장합니다.
+ (NSString *)HexStringWithColor:(UIColor *)color HasAlpha:(BOOL)hasAlpha {
    CGFloat r, g, b, a;
    [color getRed:&r green:&g blue:&b alpha:&a];
    int rgb = (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
    if (hasAlpha) {
        rgb = (int)(a * 255.0f)<<24 | (int)(r * 255.0f)<<16 | (int)(g * 255.0f)<<8 | (int)(b * 255.0f)<<0;
    }

    return [NSString stringWithFormat:@"%06x", rgb];
}

마지막으로 간단한 예시를 하나 드리겠습니다.
- (void)viewDidLoad {
    [super viewDidLoad];

    UIView *sampleView = [[UIView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:sampleView];
    //sampleView.backgroundColor = UIColorFromRGBA(0x00a47b, 1.0f);
    sampleView.backgroundColor = [UIColor ColorWithHexString:@"0x6700a47b"];
    NSString *sampleStr = [UIColor HexStringWithColor:sampleView.backgroundColor HasAlpha:YES ];
    NSLog(@"%@", sampleStr);
}

좋은 웹페이지 즐겨찾기