2010-01-27 4 views

Répondre

8

Beter tard que jamais:

d'abord mis le texte sur la vue (en mode invisible):

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

obtenir ensuite la position du texte et réglez le mode sur visible:

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

Maintenant vous avez la position du texte invisible. Utilisez ensuite le centre de l'écran (160) et placez un nouveau texte dessus.

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

heres pour aligner Gauche et Droite. vous pouvez en déterminer le centre

#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