Вы должны добавить делегата выполнения в качестве атрибута для диапазона символов в вашей атрибутной строке. См. Core Text String Attributes. При рисовании Core Text вызовет ваши обратные вызовы, чтобы получить размер этих символов.
Update
Это пример код для представления чертежа простого текста (Обратите внимание, что нет коды управления памяти здесь).
@implementation View
/* Callbacks */
void MyDeallocationCallback(void* refCon){
}
CGFloat MyGetAscentCallback(void *refCon){
return 10.0;
}
CGFloat MyGetDescentCallback(void *refCon){
return 4.0;
}
CGFloat MyGetWidthCallback(void* refCon){
return 125;
}
- (void)drawRect:(CGRect)rect {
// create an attributed string
NSMutableAttributedString * attrString = [[NSMutableAttributedString alloc] initWithString:@"This is my delegate space"];
// create the delegate
CTRunDelegateCallbacks callbacks;
callbacks.version = kCTRunDelegateVersion1;
callbacks.dealloc = MyDeallocationCallback;
callbacks.getAscent = MyGetAscentCallback;
callbacks.getDescent = MyGetDescentCallback;
callbacks.getWidth = MyGetWidthCallback;
CTRunDelegateRef delegate = CTRunDelegateCreate(&callbacks, NULL);
// set the delegate as an attribute
CFAttributedStringSetAttribute((CFMutableAttributedStringRef)attrString, CFRangeMake(19, 1), kCTRunDelegateAttributeName, delegate);
// create a frame and draw the text
CTFramesetterRef frameSetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attrString);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRect(path, NULL, rect);
CTFrameRef frame = CTFramesetterCreateFrame(frameSetter, CFRangeMake(0, attrString.length), path, NULL);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetTextMatrix(context, CGAffineTransformIdentity);
CGContextSetTextPosition(context, 0.0, 0.0);
CTFrameDraw(frame, context);
}
@end
Размер символа пробела между «делегатом» и «пробелом» в тексте контролируется делегатом прогона.
Я уже сделал это, но это не помогает. Сама документация не дает много информации о CTRunDelegate. если у вас есть образец кода для CTRunDelegate, это будет очень полезно. – tek3
Я получил ответ, прежде чем увидел ваш ответ, но вы приложили усилия, чтобы дать мне правильный ответ, так что эта щедрость идет к вам. Thanx много для вашего ответа. – tek3
Привет Мо, мне нужна дополнительная помощь от вас для моего приложения. Вы хотите помочь мне? – tek3