Эквивалент CGContextSelectFont
В iOS7 cgcontextselectfont является устаревшим. Сообщение об отказе говорит, что я должен использовать основной текст, но я не знаю, который является точным эквивалентом этого фрагмента кода:
CGContextSelectFont(context, "Helvetica", kBarLabelSize, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextFill);
CGContextSetRGBFillColor(context, 0, 0, 0, 1.0);
CGContextSetTextMatrix (context, CGAffineTransformMake(1.0, 0.0, 0.0, -1.0, 0.0, 0.0));
CGContextShowTextAtPoint(context, barX, barY, [@"Some text" cStringUsingEncoding:NSUTF8StringEncoding], [barValue length]);
Я смог создать шрифт с помощью этого кода:
CFMutableAttributedStringRef attrStr = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica"), kBarLabelSize, NULL);
CFAttributedStringSetAttribute(attrStr, CFRangeMake(0, CFAttributedStringGetLength(attrStr)), kCTFontAttributeName, font);
Но теперь я могу "нарисовать" текст с этим шрифтом в контексте?
3 ответа:
Насколько я могу понять из вашего кода, точный эквивалент:
Обратите внимание, что ваши вызовыCGContextSetTextDrawingMode(context, kCGTextFill); // This is the default [[UIColor blackColor] setFill]; // This is the default [@"Some text" drawAtPoint:CGPointMake(barX, barY) withAttributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:kBarLabelSize] }];
CGContextSetTextDrawingMode
иCGContextSetRGBFillColor
устанавливают значения по умолчанию. Ваш вызовCGContextSetTextMatrix
не требуется при использовании UIKit рисования, как это. Однако я понятия не имею, что здесь находится. Я предполагаю, что вы просто неправильно использовали это для длины@"Some text"
. (length
- это не то количество байт, которое вам нужно. То, что вы, вероятно, имели в виду, было[barValue lengthOfBytesUsingEncoding:NSUTF8StringEncoding]
).Обратите внимание, что UIKit рисунок строки (см. здесь) обертывает основной текст.
Я нашел, по крайней мере в моем случае, проблему с новой NSString.drawAtPoint интерфейс заключается в том, что он может рисовать вверх ногами, в зависимости от того, как вы используете контекст.
Альтернативой является использование основных текстовых методов, в частности интерфейса CTLine таким образом:
NSDictionary *attribs = @{NSFontAttributeName:[UIFont fontWithName:@"Helvetica" size:14.0]}; NSAttributedString *fontStr = [[NSAttributedString alloc] initWithString:@"some text" attributes:attribs]; CTLineRef displayLine = CTLineCreateWithAttributedString( (__bridge CFAttributedStringRef)fontStr ); CGContextSetTextPosition( ctx, xPosition, yPosition ); CTLineDraw( displayLine, ctx ); CFRelease( displayLine );