Как нарисовать изображение с переносом текста на iOS? - PullRequest
17 голосов
/ 12 марта 2011

Я хочу нарисовать текст, как в следующем стиле: изображение всегда в верхнем правом углу, а текст вокруг изображения.

enter image description here

Может кто-нибудь сказать мне, как реализовать это на iOS? Нужно ли использовать Core Text?

Заранее спасибо!

Ответы [ 3 ]

12 голосов
/ 12 марта 2011

Да, CoreText - лучший способ сделать это.Код, чтобы сделать это немного долго размещать здесь.Некоторый код, который может направить вас в правильном направлении, содержится в статье «Обрезка CGRect в CGPath.» Если процесс для этого по-прежнему сбивает с толку, пингуйте меня, и я наконец напишу сообщение в блоге, которое я 'намеревался написать на эту тему.

1 голос
/ 01 июля 2013

Шаг 1: Создать объект, унаследованный от UIView

Шаг 2: Переопределить - (void) drawRect: (CGRect) метод прямоугольника

Шаг 3: Добавить следующий код к этому методу

/* Define some defaults */
float padding = 10.0f;

/* Get the graphics context for drawing */
CGContextRef ctx = UIGraphicsGetCurrentContext();

/* Core Text Coordinate System is OSX style */
CGContextSetTextMatrix(ctx, CGAffineTransformIdentity);
CGContextTranslateCTM(ctx, 0, self.bounds.size.height);
CGContextScaleCTM(ctx, 1.0, -1.0);
CGRect textRect = CGRectMake(padding, padding, self.frame.size.width - padding*2, self.frame.size.height - padding*2);

/* Create a path to draw in and add our text path */
CGMutablePathRef pathToRenderIn = CGPathCreateMutable();
CGPathAddRect(pathToRenderIn, NULL, textRect);

/* Add a image path to clip around, region where you want to place image */ 
CGRect clipRect = CGRectMake(padding,  self.frame.size.height-50, 50, 40);
CGPathAddRect(pathToRenderIn, NULL, clipRect);

/* Build up an attributed string with the correct font */
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:self.Text];

//setFont
 CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:10].fontName, [UIFont systemFontOfSize:10].lineHeight, NULL);
CFAttributedStringSetAttribute(( CFMutableAttributedStringRef) attrString, CFRangeMake(0, attrString.length), kCTFontAttributeName,font);

//set text color
 CGColorRef _white=[UIColor whiteColor].CGColor;
CFAttributedStringSetAttribute(( CFMutableAttributedStringRef)(attrString), CFRangeMake(0, attrString.length),kCTForegroundColorAttributeName, _white);

/* Get a framesetter to draw the actual text */
CTFramesetterRef fs = CTFramesetterCreateWithAttributedString(( CFAttributedStringRef) attrString);
CTFrameRef frame = CTFramesetterCreateFrame(fs, CFRangeMake(0, attrString.length), pathToRenderIn, NULL);

/* Draw the text */
CTFrameDraw(frame, ctx);

/* Release the stuff we used */
CFRelease(frame);
CFRelease(pathToRenderIn);
CFRelease(fs);

Шаг 4: использовать следующим образом:

TextLayoutView *TextWrappingImage=[[TextLayoutView alloc] init...your own constructor...];

 TextWrappingImage.backgroundColor=[UIColor clearColor];

 [cell addSubview:TextWrappingImage]; //Add as subview where you want
0 голосов
/ 22 июня 2014

Аналогичная проблема. Я решил эту проблему, создав документ «текст с графикой» в формате HTML с использованием стандартных тегов разметки, добавил html и pngs в свой проект и отобразил его с помощью UIWebView. : -)

...