Я хочу нарисовать строку "Hello World!" дважды. Один раз с методом категории NSString's
UIStringDrawing
и один раз с использованием Core Text. Независимо от того, что я пробую, версия Core Text рисует путь к большому. У кого-нибудь есть объяснение, почему?
Полная реализация созданного мной подкласса UIView
bare * UIView
приведена ниже.
@implementation CTView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
self.opaque = YES;
self.backgroundColor = [UIColor whiteColor];
}
return self;
}
- (void)drawRect:(CGRect)rect
{
CGContextRef c = UIGraphicsGetCurrentContext();
[[UIColor blackColor] set];
NSString *helloWorld = @"Hello World!";
UIFont *helloWorldFont = [UIFont systemFontOfSize:16];
CGContextSaveGState(c); {
[helloWorld drawInRect:rect
withFont:helloWorldFont];
} CGContextRestoreGState(c);
CGContextSaveGState(c); {
// setting up attributed string of the catagory name to draw with Core Text
NSMutableAttributedString *name = [[NSMutableAttributedString alloc] initWithString:@"P"];
[name setFont:helloWorldFont];
[name setTextColor:[UIColor blackColor]];
// getting frames for the text
CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)name);
CFRelease(name);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, rect);
CTFrameRef textFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CGPathRelease(path);
CFRelease(framesetter);
// draw the text
CTFrameDraw(textFrame, c);
CFRelease(textFrame);
} CGContextRestoreGState(c);
}
@end