我正在寻找一种使用context.ShowTextAtPoint()方法在iPhone上居中文本的方法。
答案 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