2010-01-27 5 views

답변

8

BETER 늦게 결코보다는 :

먼저 (보이지 않는 모드) 뷰의 텍스트를 넣어 :

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