2010-01-27 22 views

回答

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")); 
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