2013-02-17 18 views
5

बनाने के लिए आईओएस श्रेणी का उपयोग करें, मैं कुछ नए UIColor एस बनाना चाहता हूं जो पूरे ऐप में उपयोग किए जाते हैं। समय-समय पर आरजीबी थोड़ा tweaked है (सटीक रंग छाया पर बहस हो रही है)नया रंग

वर्तमान में मुझे आरजीबी से नए रंग बनाना है और कोड को बार-बार छिड़काया जाता है।

क्या कोई बेहतर तरीका है जहां मैं एक नया रंग बना सकता हूं और अपने ऐप के माध्यम से इसका उपयोग कर सकता हूं।

[UIColor myNewCustomRedColor] 

यहां सबसे अच्छा पैटर्न क्या है - श्रेणी सही विकल्प है - यदि ऐसा है तो कैसे? यदि नहीं - अनुशंसित दृष्टिकोण क्या है।

उत्तर

5

अन्य परियोजनाओं पर मैंने एक दृष्टिकोण का उपयोग किया है, एक ProjectStyle.h फ़ाइल बनाने के लिए, जिसमें कस्टम रंगों और अन्य शैली से संबंधित स्थिरांक के लिए # परिभाषाएं हैं। आपको बस इसे आयात करने की आवश्यकता है।

कुछ की तरह:

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] 

तुम भी एक इसी .m फ़ाइल अगर आप कुछ UIColor या UIFont वस्तुओं की लगातार उदाहरणों बनाना चाहता था, जैसे

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; 
} 

कुछ तो निश्चित रूप से हो सकता है और शीर्षलेख में उनको बेनकाब करें

दूसरी चीज़ जो मुझे प्रोजेक्ट स्टाइल प्रकार के दृष्टिकोण के बारे में पसंद है वह यह है कि थोड़ी देर बाद आप जुस की तुलना में अधिक कस्टम चीजें चाहते हैं टी रंग - कस्टम फोंट, कस्टम लाइन और छाया। इन सभी चीजों को रखने के लिए स्टाइल क्लास या हेडर रखने से आपको यह देखने के लिए एक जगह मिलती है कि कौन से कस्टम तत्व पहले से ही सभी प्रकार के चीजों के लिए परिभाषित किए गए हैं, और एक बहुत ही स्पष्ट # बाद के कोडर्स के लिए आयात आपको कस्टम जानकारी के केंद्रीकृत कुएं का पालन करने के लिए ।

यदि आप केवल श्रेणियों में कस्टम तत्व डालते हैं तो आप कई श्रेणियों में फैले अनुकूलन के साथ समाप्त होते हैं, और अन्य तीसरे पक्ष के पुस्तकालयों के साथ श्रेणी नाम टकराव की संभावना (अधिकतर दूरस्थ) भी होते हैं।

+1

डब्ल्यूडब्ल्यूडीसी 2012 सत्र 216 इसमें कोई दिलचस्पी नहीं है, अगर कोई दिलचस्पी लेता है। – MaxGabriel

+0

कुछ स्टाइलशीट का उपयोग करते हुए समान पैटर्न उचित लगता है, मैं हमेशा इस तरह के कार्य के लिए प्रीप्रोसेसर निर्देशों का उपयोग करने से बचना चाहता हूं - परिभाषित प्रकार सुरक्षित नहीं हैं और इसलिए बदसूरत हैं। एक उचित उपस्थिति विशेषताओं (रंग की तरह) कारखाने का उपयोग क्यों नहीं कर रहे हैं। कुछ '[MyAppearance रंग: @ "ultraBlue"] ' – Till

+3

# परिभाषित प्रकार सुरक्षित है, क्योंकि वे वास्तविक कोड होने के कारण स्थिर विश्लेषक और डीबगर द्वारा जांच किए जाते हैं, वैसे ही कोई अन्य कोड होगा (तो कहीं कहीं एक # डिफाईन का उपयोग करें जिसके परिणामस्वरूप यूआईसीओलर होता है, लेकिन एक CGColor की आवश्यकता होती है आपको तुरंत चेतावनी मिल जाएगी)। संपादक #define कोड को स्वतः पूर्ण करता है, इसलिए MY_COLOR.CGColor स्वत: पूर्णताएं।साथ ही, # पूरी तरह से स्वतः पूर्ण करें - अपने उदाहरण में आपको अभी भी "अल्ट्राब्लू" टाइप करना होगा जो त्रुटि के लिए जगह छोड़ देता है। #define या फैक्ट्री विधियों का उपयोग करके शैलियों को आसानी से त्रुटि को खत्म करने के लिए स्वतः पूर्ण होना चाहिए। –

9

श्रेणी इस तरह के कुछ के लिए एक अच्छा विकल्प है। मैं आमतौर पर फाइलों की एक नई .h/.m जोड़ी बना देता हूं, MyCategories.h/MyCategories.m, जिसमें आमतौर पर उपयोग की जाने वाली श्रेणियां होती हैं जिन्हें आप हर जगह चाहते हैं।

MyCategories.h:

@interface UIColor (MyCategory) 

+ (UIColor *)customRedColor; 

@end 

MyCategories.m

@implementation UIColor (MyCategory) 

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

@end 

आप ज फ़ाइल आयात या तो कर सकते हैं आपको उपलब्ध हो जाए, या आप अपने MyApp-उपसर्ग में आयात छड़ी कर सकते हैं। पीएचसी फ़ाइल।

+0

मैं केवल इतना जोड़ूंगा कि श्रेणी फ़ाइलों को नामित करना एक अच्छा विचार है <वर्ग श्रेणी विस्तारित + श्रेणीकरण - उदाहरण के लिए यूआईसीओलर + कस्टमकॉलर्स, मुझे परियोजनाओं के आयोजन के लिए यह बहुत उपयोगी लगता है। –