Могу ли я использовать NSAttributedString в Core Text в iOS? - PullRequest
10 голосов
/ 22 сентября 2010

Я пытаюсь понять, как взять NSAttributedString и использовать его в Core Text на iPad. Я посмотрел одно из видеороликов WWDC (110), в котором есть слайды (но без исходного кода), и оно описывает, как создать NSAttributedString, а затем просто поместить его в CTFramesetterRef:

CTFontRef helveticaBold = CTFontCreateWithName( CFSTR("Helvetica-Bold"), 24.0, NULL);

NSString* unicodeString = NSLocalizedString(@"TitleString", @"Window Title");
CGColorRef color = [UIColor blueColor].CGColor; NSNumber* underline = [NSNumber numberWithInt:kCTUnderlineStyleSingle|kCTUnderlinePatternDot];
NSDictionary* attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:helveticaBold, (NSString*)kCTFontAttributeName, color, (NSString*)kCTForegroundColorAttributeName, underline, (NSString*)kCTUnderlineStyleAttributeName, nil];
NSAttributedString* stringToDraw = [[NSAttributedString alloc] initWithString:unicodeString attributes:attributesDict];

CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(stringToDraw);

CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL);
CFRelease(framesetter);
CTFrameDraw(frame, context);
CFRelease(frame);

Но когда я пытаюсь это сделать, выдает ошибку:

Передача аргумента 1 из 'CTFramesetterCreateWithAttributedString' из несовместимого типа указателя

Являются ли CFAttributedString и NSAttributedString бесплатными мостами? Я где-то читал, что это верно только для OSX, но именно так Apple делает это в своей демонстрации ...

Спасибо!

: - Джо

Ответы [ 3 ]

8 голосов
/ 22 сентября 2010

Вы можете скачать исходный код WWDC10 здесь . Кроме того, используйте бесплатное мостовое соединение и явно приведите ваш stringToDraw к CFAttributedStringRef.

4 голосов
/ 24 апреля 2012

Ты почти у цели. Просто приведите CTFontRef к типу id при добавлении его в словарь атрибутов.

CTFontRef helveticaBold = CTFontCreateWithName( CFSTR("Helvetica-Bold"), 24.0, NULL);

NSString* unicodeString = NSLocalizedString(@"TitleString", @"Window Title");

CGColorRef color = [UIColor blueColor].CGColor; 
NSNumber* underline = [NSNumber numberWithInt:
    kCTUnderlineStyleSingle|kCTUnderlinePatternDot];

NSDictionary* attributesDict = [NSDictionary dictionaryWithObjectsAndKeys:
                    (id)helveticaBold, (NSString*)kCTFontAttributeName, 
                    color, (NSString*)kCTForegroundColorAttributeName, 
                    underline, (NSString*)kCTUnderlineStyleAttributeName, nil];

NSAttributedString* stringToDraw = [[NSAttributedString alloc] 
                            initWithString:unicodeString
                            attributes:attributesDict];
0 голосов
/ 19 сентября 2012

код сеанса WWDC 110 CTPageViewer теперь является частью официального образца кода Apple:

http://developer.apple.com/library/ios/#samplecode/CoreTextPageViewer/Listings/ReadMe_txt.html

...