2012-12-15 29 views
5

tôi cần phải chuyển đổi một UIColor một NSString với tên của màu tức làObjective C UIColor để NSString

[UIColor redColor]; 

nên trở thành

@"RedColor" 

Tôi đã cố gắng [UIColor redColor].CIColor.stringRepresentation nhưng nó gây ra lỗi biên dịch

+2

Xem câu trả lời được đánh giá hàng đầu ở đây; nó có thể hỗ trợ: http://stackoverflow.com/questions/1748350/how-to-convert-uicolor-value-to-nsstring – Luke

+0

Bạn không thể làm những gì bạn muốn mà không cần viết phương pháp của riêng bạn. Những câu trả lời mà mọi người đang chỉ cho bạn là sẽ cung cấp cho bạn một cái gì đó như "1 0 0 1" hoặc "UIDeviceRGBColorSpace 1 0 0 1". – rdelmar

+0

Làm thế nào để bạn muốn có được tên màu này - đó là, làm thế nào bạn sẽ sử dụng nó? – rdelmar

Trả lời

9

Chỉ cần mở rộng câu trả lời mà @Luke liên kết để tạo ra một CGColorRef để chuyển tới CIColor:

CGColorRef colorRef = [UIColor grayColor].CGColor; 

Bạn thay vì có thể chỉ đơn giản là vượt qua tài sản CGColor của UIColor bạn đang làm việc trên như:

NSString *colorString = [[CIColor colorWithCGColor:[[UIColor redColor] CGColor]] stringRepresentation]; 

Đừng quên để nhập khẩu khuôn khổ cốt lõi ảnh.

Side lưu ý, một cách nhanh chóng và dễ dàng để chuyển đổi trở lại một UIColor từ chuỗi có thể là một cái gì đó như thế này:

NSArray *parts = [colorString componentsSeparatedByString:@" "]; 
UIColor *colorFromString = [UIColor colorWithRed:[parts[0] floatValue] green:[parts[1] floatValue] blue:[parts[2] floatValue] alpha:[parts[3] floatValue]]; 
+1

Điều này sẽ không cho anh ta "GrayColor" đó là những gì anh ta yêu cầu. – rdelmar

+0

@rdelmar Thú vị, tôi đoán tôi đã bỏ qua chi tiết đó ... nghiên cứu ... –

+2

Tôi đã thử cả hai liên kết này nhưng cả hai đều trả về số rgb + alpha tương đương. Tôi muốn biết tên của màu sắc nên [uicolor whitecolor] sẽ trả về màu trắng KHÔNG 1 1 1 1 – Alex

2

Đây là con đường ngắn nhất để chuyển đổi UIColor để NSString:

- (NSString *)stringFromColor:(UIColor *)color 
{ 
    const size_t totalComponents = CGColorGetNumberOfComponents(color.CGColor); 
    const CGFloat * components = CGColorGetComponents(color.CGColor); 
    return [NSString stringWithFormat:@"#%02X%02X%02X", 
      (int)(255 * components[MIN(0,totalComponents-2)]), 
      (int)(255 * components[MIN(1,totalComponents-2)]), 
      (int)(255 * components[MIN(2,totalComponents-2)])]; 
} 
Các vấn đề liên quan