2010-12-15 25 views
8

Về việc lưu UIColor trong Plist: Tôi đã thử nhiều cách khác nhau nhưng không thể làm như vậy, tôi muốn lưu và lấy các giá trị màu trong một tệp plist.Làm thế nào để tải UIColor từ một Plist

Tôi không thể trích xuất giá trị dữ liệu của màu bằng cách sử dụng nslog và lưu nó vào trong danh sách.

Có cách nào khác để làm như vậy không?

Trả lời

7

Tôi thích sử dụng chuỗi để lưu trữ màu. Mã phân tích rằng điều này hiển thị dưới đây (cắt ra từ https://github.com/xslim/TKThemeManager/blob/master/TKThemeManager.m#L162)

+ (UIColor *)colorFromString:(NSString *)hexString {  
    NSScanner *scanner = [NSScanner scannerWithString:hexString]; 
    unsigned hex; 
    BOOL success = [scanner scanHexInt:&hex]; 

    if (!success) return nil; 
    if ([hexString length] <= 6) { 
     return UIColorFromRGB(hex); 
    } else { 
     unsigned color = (hex & 0xFFFFFF00) >> 8; 
     CGFloat alpha = 1.0 * (hex & 0xFF)/255.0; 
     return UIColorFromRGBA(color, alpha); 
    } 
} 
1

tôi đã làm một thể loại cho việc này:

@implementation UIColor (EPPZRepresenter) 


NSString *NSStringFromUIColor(UIColor *color) 
{ 
    const CGFloat *components = CGColorGetComponents(color.CGColor); 
    return [NSString stringWithFormat:@"[%f, %f, %f, %f]", 
      components[0], 
      components[1], 
      components[2], 
      components[3]]; 
} 

UIColor *UIColorFromNSString(NSString *string) 
{ 
    NSString *componentsString = [[string stringByReplacingOccurrencesOfString:@"[" withString:@""] stringByReplacingOccurrencesOfString:@"]" withString:@""]; 
    NSArray *components = [componentsString componentsSeparatedByString:@", "]; 
    return [UIColor colorWithRed:[(NSString*)components[0] floatValue] 
          green:[(NSString*)components[1] floatValue] 
          blue:[(NSString*)components[2] floatValue] 
          alpha:[(NSString*)components[3] floatValue]]; 
} 


@end 

Các định dạng tương tự được sử dụng bởi NSStringFromCGAffineTransform. Đây thực sự là một phần của một đại diện plist đối tượng quy mô lớn hơn trong [eppz! Kit tại GitHub] [1].

+0

Chỉ cần lưu ý rằng, màu xanh lá cây, các giá trị màu xanh đỏ là 0.0-1.0 không 0-255 nên chia chúng bằng 255 để có được giá trị đúng - đây bắt gặp tôi trong một thời gian. – amergin

+0

Điều này là để lưu trữ trong 'plist', bạn có thể muốn" thiết kế "các màu trong' plist'. Đối với người trợ giúp chuyển đổi RGB, hãy xem http://stackoverflow.com/questions/13224206/how-do-i-create-an-rgb-color-with-uicolor/21297254#21297254 và http://stackoverflow.com/questions/ 437113/how-to-get-rgb-giá trị-từ-uicolor/21296829 # 21296829. – Geri

3

Đối với một giải pháp nhanh chóng (nhưng có lẽ không phải là người đẹp nhất):

  • Thêm thuộc tính màu sắc như một số loại vào plist
  • Nhập màu như một RGB-hexdecimal, ví dụ: 0xff00e3
  • đọc nó ra và xử lý nó với một vĩ mô như dưới đây

dưới đây là một ví dụ mã:

// Add this code to some include, for reuse 
#define UIColorFromRGBA(rgbValue, alphaValue) ([UIColor colorWithRed:((CGFloat)((rgbValue & 0xFF0000) >> 16))/255.0 \ 
                   green:((CGFloat)((rgbValue & 0xFF00) >> 8))/255.0 \ 
                   blue:((CGFloat)(rgbValue & 0xFF))/255.0 \ 
                   alpha:alphaValue]) 

// This goes into your controller/view 
NSDictionary *myPropertiesDict = [NSDictionary dictionaryWithContentsOfFile:...]; 
UIColor *titleColor = UIColorFromRGBA([myPropertiesDict[@"titleColor"] integerValue], 1.0); 

Sau khi nhập màu dưới dạng thập lục phân, trình chỉnh sửa plist sẽ hiển thị dưới dạng số thập phân. Không hay. Là một nhà phát triển, bạn thường sao chép dán các màu sắc từ một tài liệu thiết kế anyway, do đó, cần phải đọc các giá trị màu sắc không phải là lớn.

Các vấn đề liên quan