iPhone中心文字ShowTextAtPoint

时间:2010-01-27 22:07:13

标签: iphone

我正在寻找一种使用context.ShowTextAtPoint()方法在iPhone上居中文本的方法。

2 个答案:

答案 0 :(得分:8)

迟到总比不上:

首先将文本放在视图上(以隐身模式):

CGTextDrawingMode mode = CGContextGetTextDrawingMode(ctx);
CGContextSetTextDrawingMode(ctx, kCGTextInvisible);
CGContextShowTextAtPoint(ctx, 0, 0, @"test", strlen("test"));

然后获取文本的位置并将模式设置回可见:

CGPoint pt = CGContextGetTextPosition(ctx);
CGContextSetTextDrawingMode(ctx, mode);

现在你拥有了不可见文本的位置。然后使用屏幕中心(160)并在其上放置一个新文本。

CGContextShowTextAtPoint(ctx, 160 - pt.x / 2, 200, @"test", strlen("test"));

答案 1 :(得分:2)

继承人代码左右对齐。你可以从中找出中心

#import <UIKit/UIKit.h>


@interface AdustableUILabel : UILabel{
    CGFloat characterSpacing;

}

@property CGFloat characterSpacing;


@end

#import "AdustableUILabel.h"

@implementation AdustableUILabel

@synthesize characterSpacing;

- (void)drawTextInRect:(CGRect)rect
{    
    if (characterSpacing)
    {
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGFloat size = self.font.pointSize;

        CGContextSelectFont (context, [self.font.fontName UTF8String], size, kCGEncodingMacRoman);
        CGContextSetCharacterSpacing (context, characterSpacing);
        CGContextSetTextDrawingMode (context, kCGTextFill);

        CGContextSetRGBFillColor(context, 255/255.0, 255/255.0, 255/255.0, 255/255.0);


        // Rotate text to not be upside down
        CGAffineTransform xform = CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0);
        CGContextSetTextMatrix(context, xform);
        const char *cStr = [self.text UTF8String];
        //get the UILabel alignment
        if(self.textAlignment == UITextAlignmentLeft){
            // Drawing code
            //just draw it in the current Rect offset from LHS            

            CGContextShowTextAtPoint (context, rect.origin.x, rect.origin.y + size, cStr, strlen(cStr));
        }else{
            //RHS
            //draw in invisible mode, get the size then subtract from width of rect to get left hand x of the text
            CGContextSetTextDrawingMode(context, kCGTextInvisible);
            CGContextShowTextAtPoint (context, rect.origin.x, rect.origin.y + size, cStr, strlen(cStr));

            //Then get the position of the text and set the mode back to visible:            
            CGPoint pt = CGContextGetTextPosition(context);            
            //Draw at new position
            CGContextSetTextDrawingMode(context, kCGTextFill);
            CGContextShowTextAtPoint(context, rect.size.width - pt.x, rect.origin.y + size, cStr, strlen(cStr));
            //===============
        }        
    }
    else
    {
        // no character spacing provided so do normal drawing
        [super drawTextInRect:rect];
    }
}

@end