2008-11-03 12 views
19

iPhone एप्लिकेशन का एक बहुत इस तरह के मेल क्लाइंट के रूप में subviews में आइटमों की संख्या, बताने वाला नीला बिल्ला का उपयोग करें:क्या आईफोन में "ब्लू बैज" को लागू करने का कोई मानक तरीका है?

iPhoto http://img.skitch.com/20081103-tjr9yupbhgr3sqfh7u56if4rsn.preview.jpg

वहाँ किसी भी मानकों जिस तरह से (या यहां तक ​​कि एक एपीआई) कर रहे हैं ऐसा करने के?

अद्यतन: मैंने ऐसा करने के लिए ब्लूबैज नामक एक कक्षा बनाई है। यह http://github.com/leonho/iphone-libs/tree/master

उत्तर

22

मेरे ज्ञान के लिए इसके लिए कोई एपीआई नहीं है। हालांकि, कोरग्राफिक्स का उपयोग (NSBezierPath आईफोन पर उपलब्ध नहीं है), आप इसे आसानी से कर सकते हैं।

CGContextRef  context = UIGraphicsGetCurrentContext(); 
float    radius = bounds.size.height/2.0; 
NSString   *countString = [NSString stringWithFormat: @"%d", count]; 

CGContextClearRect(context, bounds); 

CGContextSetFillColorWithColor(context, ovalColor); 
CGContextBeginPath(context); 
CGContextAddArc(context, radius, radius, radius, M_PI/2 , 3 * M_PI/2, NO); 
CGContextAddArc(context, bounds.size.width - radius, radius, radius, 3 * M_PI/2, M_PI/2, NO); 
CGContextClosePath(context); 
CGContextFillPath(context); 

[[UIColor whiteColor] set]; 

UIFont    *font = [UIFont boldSystemFontOfSize: 14]; 
CGSize    numberSize = [countString sizeWithFont: font]; 

bounds.origin.x = (bounds.size.width - numberSize.width)/2; 

[countString drawInRect: bounds withFont: font]; 
+0

धन्यवाद बेन। यह ठीक वैसा ही है जैसा मुझे चाहिए। – leonho

0

पर उपलब्ध है NSBezierPath क्लास में कुछ तरीके हैं जिन्हें "appendBezierPathWithRoundedRect ...." कहा जाता है।

मैंने उन्हें खुद से बाहर करने की कोशिश की, लेकिन वे काम कर सकते हैं। यह आजमाने के काबिल है।

-7

एक और प्रकार का बैज भी है जिसे आप पहले से ही जानते हैं, यह एप्लिकेशन आइकन पर "लाल" है। वे कुछ ऐसा करने के द्वारा बनाए जाते हैं:

NSDate *now = [NSDate dateWithTimeIntervalSinceNow:0]; 
NSString *caldate = [[now 
     dateWithCalendarFormat:@"%b" 
     timeZone:nil] description]; 
[self setApplicationBadge:caldate];" 

यह बैज को वर्तमान माह के लिए 3 अक्षर संक्षेप के साथ सेट करेगा।

3

मैं कुछ बहुत UITabBarItem बिल्ला के पास लागू करने के लिए एक बेहतर तरीका UIImage stretchableImageWithLeftCapWidth:topCapHeight: विधि का उपयोग करने, जहां दोनों अंत टोपियां एक सजावटी छवि और मध्यम हो सकता है लगता है: यह एक CGPath में सिर्फ दो चाप और कुछ पाठ है NSString आकार फिट करने के लिए स्वचालित रूप से स्ट्रेच होगा (1px विस्तृत छवि का उपयोग करके) जो शीर्ष पर ओवरलैड होगा।

अभी भी उचित छवियां प्राप्त करने की आवश्यकता है लेकिन इसे स्क्रीनशॉट से आसानी से खींच लिया जा सकता है या पीएस से बनाया जा सकता है।

1

आप एक सरल UILabel का उपयोग कर और बदलते अपनी अंतर्निहित परत के cornerRadius द्वारा आसानी से और लचीलेपन यह कर सकते हैं:

#import <QuartzCore/QuartzCore.h> // don't forget! 
// ... 
UILabel *badge = [[UILabel alloc] init]; 
badge.layer.backgroundColor = [UIColor blueColor].CGColor; 
badge.layer.cornerRadius = badge.bounds.size.height/2; 

आप उपयोग कर सकते हैं मेरी (छोटे और सरल) code for a BadgeLabel class and a matching BadgeTableViewCell class

संबंधित मुद्दे

 संबंधित मुद्दे