Так у вас есть это:
CFAttributedStringRef cfAttributedString = ...;
CTLineRef line = ...;
CFRange cfRange = CTLineGetStringRange(line);
Преобразование CFRange
к NSRange
и кастовал CFAttributedStringRef
Ань NSAttributedString *
:
NSRange nsRange = NSMakeRange(cfRange.location, cfRange.length);
NSAttributedString *richText = (__bridge NSAttributedString *)cfAttributedString;
Затем вы можете использовать сообщение Objective-C, чтобы получить подстроку , Если вы хотите отнести подстроку:
NSAttributedString *richSubtext = [richText attributedSubstringFromRange:nsRange];
Если вы хотите простой подстроки:
NSString *substring = [richText.string substringWithRange:nsRange];
Если вы хотите придерживаться ключевых функций Фонда по какой-то причине (я бы не рекомендовал его), вы может получить приписываемую подстроку:
CFAttributedStringRef cfAttributedSubstring = CFAttributedStringCreateWithSubstring(
NULL, cfAttributedString, cfRange);
или простую подстроку так:
CFStringRef cfString = CFAttributedStringGetString(cfAttributedString);
CFStringRef cfSubstring = CFStringCreateWithSubstring(NULL, cfString, cfRange);
Я предполагаю, что вы CTLineGetGlyphRuns ... затем CTRunGetGlyphs ... от каждого прогона. –
поблагодарить john, но CTRunGetGlyphs вернет мне CGGlyph ... я хочу получить CFStringRef :( – loki