2013-05-10 58 views
0

當使用CoreGraphics中繪製一個字符串/標籤圖紙,我們有2種方法使用哪種方法顯示文本?爲什麼?

- (CGSize)drawInRect:(CGRect)rect withFont:(UIFont *)font lineBreakMode:(NSLineBreakMode)lineBreakMode alignment:(NSTextAlignment)alignment; 

如:

[value drawInRect:CGRectMake(xValue, rect.origin.y, objLegends.value *singleUnitWidth,heightOfBar) 
       withFont:[UIFont systemFontOfSize:10.0f] 
      lineBreakMode:NSLineBreakByClipping 
       alignment:NSTextAlignmentCenter]; 

CG_EXTERN void CGContextShowText(CGContextRef c, const char *string, 
    size_t length) CG_AVAILABLE_STARTING(__MAC_10_0, __IPHONE_2_0); 

 CGContextSaveGState(context); 
     // Tanslate and scale upside-down to compensate for Quartz's inverted coordinate system 
     CGContextSetTextMatrix(context, CGAffineTransformMake(1.0,0.0, 0.0, -1.0, 0.0, 0.0)); 

     CGContextSelectFont(context, "Helvetica", 10.0f, kCGEncodingMacRoman); 
     CGContextSetTextDrawingMode(context, kCGTextFill); 
     CGContextSetTextPosition(context, xValue, rect.size.height-heightOfText); 


     if ([value canBeConvertedToEncoding:NSMacOSRomanStringEncoding]) 
     { 
      CGContextShowText(context, [value cStringUsingEncoding:NSMacOSRomanStringEncoding],5); 
      //        strlen([value cStringUsingEncoding:NSMacOSRomanStringEncoding])); 
     } 
     CGContextRestoreGState(context); 

w ^這是一個好方法,爲什麼?

+0

其中只有一種是方法,而且有兩種以上。 NSString方法優於CGContext函數的一個優點是,對於後者,您必須嘗試在MacRoman中編碼字符串,這可能會失敗。 NSString方法,它的NSAttributedString對應和Core Text都是可識別Unicode的。 – 2013-05-10 21:04:06

回答

1

最好的方法是實現你的目標最簡單的方法。您可以使用更好的API級別越高。如果您可以使用NSString方法,那麼您應該 - 除非您可以使用UILabel(或類似)爲您完成工作。總是嘗試編寫儘可能少的代碼並重新使用爲您提供的代碼,如果您的需求或性能分析顯示您需要,可以使用較低級別的API。

相關問題