2013-02-17 37 views
5

Tôi muốn tạo một số mới UIColor s được sử dụng trong ứng dụng của mình trong suốt. Đôi khi RGB được điều chỉnh một chút (màu sắc chính xác đang được tranh luận)Sử dụng danh mục iOS để tạo Màu mới

Hiện tại tôi phải tạo ra các màu mới từ RGB và mã được rắc khắp và lặp lại.

Có cách nào tốt hơn để tôi có thể tạo màu mới và sử dụng thông qua ứng dụng của mình hay không.

[UIColor myNewCustomRedColor] 

Mẫu tốt nhất ở đây là gì - là như thế nào? Nếu không có cách tiếp cận được khuyến nghị là gì.

Trả lời

5

Một cách tiếp cận tôi đã sử dụng trên các dự án khác là tạo tệp ProjectStyle.h, có #defines cho màu tùy chỉnh và các hằng số có liên quan đến kiểu khác. Bạn chỉ cần nhập nó.

Cái gì như:

ProjectStyles.h 

#define RED_HEADER_COLOR [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f] 
#define RED_BACKGROUND_COLOR [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f] 
#define PRIMARY_FONT [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f] 

Bạn cũng có thể có một tập tin .m tương ứng nếu bạn muốn tạo ra các trường hợp liên tục của một số đối tượng UIColor hoặc UIFont, một cái gì đó giống như

ProjectStyles.m 

+ (UIColor *) redHeaderColor 
{ return [UIColor colorWithRed:0.8f green:0.1f blue:0.1f alpha:0.9f]; } 

+ (UIColor *) redBackgroundColor 
{ return [UIColor colorWithRed:0.9f green:0.3f blue:0.1f alpha:1.0f]; } 

+ (UIFont *) primaryFont 
{ 
    static UIFont *font = nil; 
    if (font == nil) 
     font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:12.0f]; 
    return font; 
} 

Và sau đó tất nhiên phơi bày những điều đó trong tiêu đề

Điều khác tôi thích về kiểu tiếp cận ProjectStyle là sau một thời gian bạn sẽ muốn nhiều thứ tùy chỉnh hơn jus t màu sắc - phông chữ tùy chỉnh, dòng tùy chỉnh và bóng tối. Có một lớp Style hoặc header để đặt tất cả những thứ này cho bạn một nơi để tìm kiếm những yếu tố tùy chỉnh nào đã được định nghĩa cho tất cả mọi thứ, và một #import rất rõ ràng để các lập trình viên sau đó theo dõi lại bạn tập trung tốt của thông tin tùy chỉnh .

Nếu bạn chỉ đặt các phần tử tùy chỉnh vào danh mục thì bạn kết thúc với tùy chỉnh trải rộng trên nhiều danh mục và cũng có khả năng (chủ yếu là từ xa) về xung đột tên danh mục với thư viện bên thứ ba khác.

+1

WWDC 2012 phiên 216 trình bày một cách tiếp cận rất giống với điều này, nếu có ai quan tâm. – MaxGabriel

+0

Trong khi sử dụng một số mẫu giống như mẫu có vẻ thích hợp, tôi sẽ luôn luôn kiềm chế sử dụng chỉ thị tiền xử lý cho nhiệm vụ đó - định nghĩa không an toàn kiểu và do đó xấu xí. Tại sao không sử dụng một thuộc tính xuất hiện thích hợp (như màu) nhà máy. Một cái gì đó như '[MyAppearance màu: @" ultraBlue "]' – Till

+3

#define là loại an toàn, bởi vì họ kết thúc được mã thực được kiểm tra bởi các phân tích tĩnh và trình gỡ lỗi trong cùng một cách bất kỳ mã khác sẽ được (để một nơi nào đó nếu bạn sử dụng #define dẫn đến UIColor, nhưng cần CGColor bạn sẽ nhận được cảnh báo ngay lập tức). Trình chỉnh sửa cũng tự động hoàn thành mã #define, vì vậy MY_COLOR.CGColor tự động hoàn thành.Ngoài ra, #define items autocomplete hoàn toàn - trong ví dụ của bạn, bạn vẫn phải gõ @ "ultraBlue" để lại chỗ cho lỗi. Sử dụng phương thứC#define hoặc factory, các kiểu sẽ dễ dàng tự động hoàn thành để loại bỏ lỗi. –

9

Danh mục là lựa chọn tốt cho những thứ như thế này. Tôi thường chỉ tạo một cặp tệp .h/.m mới, MyCategories.h/MyCategories.m, chứa các danh mục thường được sử dụng mà bạn muốn ở mọi nơi.

MyCategories.h:

@interface UIColor (MyCategory) 

+ (UIColor *)customRedColor; 

@end 

MyCategories.m

@implementation UIColor (MyCategory) 

+ (UIColor *)customRedColor { 
    return [UIColor redColor]; 
} 

@end 

Bạn có thể nhập khẩu các tập tin .h bất cứ nơi nào bạn cần, hoặc bạn có thể dính vào việc nhập khẩu trong của bạn MyApp-Tiền tố. tệp pch.

+0

Tôi chỉ muốn thêm rằng bạn nên đặt tên các tệp danh mục là + CategoryName - Ví dụ: UIColor + CustomColors, tôi thấy rất hữu ích khi tổ chức các dự án. –