使用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);


哪一种是好的方法,为什么?

最佳答案

最好的方法是最简单的方法来实现您的目标。您可以使用的API级别越高越好。如果可以使用NSString方法,则应该-除非可以使用UILabel(或类似方法)为您完成这项工作。始终尝试编写尽可能少的代码,然后重复使用为您提供的代码,如果您的要求或性能分析表明需要,请放弃使用较低级别的API。

10-08 01:24