UILabelにルビ付きのテキストを設定したい
iOSアプリのUILabelにルビ付きのテキストを設定したいのですがUILabel.attributedTextにCFAttributedStringRef型のルビを付けたテキストをNSAttributedString型にキャストしたものを代入してもコンパイルは通るものの実行時エラーで止まります。
下記コードの一部になります。 http://dev.classmethod.jp/references/ios8-ctrubyannotationref/ を参考にさせていただきました。
UILabel *textLbl = (UILabel*)[cell viewWithTag:1];
CFStringRef writing = (__bridge CFStringRef)@"東京都";
CFStringRef furigana[kCTRubyPositionCount] = {
(__bridge CFStringRef) @"とうきょうと", NULL, NULL, NULL
};
CTRubyAnnotationRef ruby = CTRubyAnnotationCreate(kCTRubyAlignmentAuto, kCTRubyOverhangAuto, 0.5, furigana);
CFAttributedStringRef writingAttributedString = [self attributedString:writing ruby:ruby];
// ここでsignal sigabrtと言われて止まります。
textLbl.attributedText = (__bridge NSAttributedString *)(writingAttributedString);
// [self attributedString:writing ruby:ruby]部
- (CFAttributedStringRef)attributedString:(CFStringRef)string ruby:(CTRubyAnnotationRef)ruby
{
// Font style
CTFontRef font = CTFontCreateWithName(CFSTR("Verdana"), 28, NULL);
// Font color
CGColorRef fontColor = [UIColor redColor].CGColor;
// Paragraph
CTTextAlignment alignment = kCTRightTextAlignment;
CTParagraphStyleSetting settings[] = {
{kCTParagraphStyleSpecifierAlignment, sizeof(alignment), &alignment}
};
CTParagraphStyleRef paragraphStyle = CTParagraphStyleCreate(settings, sizeof(settings) / sizeof(settings[0]));
// Create an attributed string
CFStringRef keys[] = { kCTFontAttributeName , kCTParagraphStyleAttributeName, kCTForegroundColorAttributeName, kCTRubyAnnotationAttributeName};
CFTypeRef values[] = { font, paragraphStyle, fontColor, ruby};
CFDictionaryRef attr = CFDictionaryCreate(NULL, (const void **)&keys, (const void **)&values,
sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFAttributedStringRef attributes = CFAttributedStringCreate(NULL, string, attr);
CFRelease(attr);
return attributes;
}
他にUILabelにルビ付きテキストを設定するのに適した方法はありますか?