IPhone Center Text ShowTextAtPoint

I am looking for a way to centralize text on an iPhone using the context.ShowTextAtPoint () method.

+4
source share
2 answers

Better late than never:

First place the text in the view (in invisible mode):

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

Then find the position of the text and return the mode to visibility mode:

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

Now you have the position of the invisible text. Then use the center of the screen (160) and apply new text on it.

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

heres code to align left and right. you can determine the center from it

 #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 
+2
source

Source: https://habr.com/ru/post/1299592/


All Articles