7

CALayer でアラビア語などの右から左への言語を正しくレンダリングできるように、文字列の書き込み方向を決定したいと考えています。

だから私はこの方法を持っています

+(UITextAlignment)alignmentForString:(NSString *)astring
{
    UITextView *text = [[UITextView alloc] initWithFrame:CGRectZero];
    text.text = astring;

    if ([text baseWritingDirectionForPosition:[text beginningOfDocument] inDirection:UITextStorageDirectionForward] == UITextWritingDirectionRightToLeft) {
        return UITextAlignmentRight;
    }

    return UITextAlignmentLeft;

}

正常に動作しますが、特に drawInContext で呼び出されたときにテキストをどのように配置するかを発見するためだけに少し重く感じます (ただし、比較的まれです)。

特定の文字列の書き込み方向を決定する簡単な方法はありますか、それとも時期尚早の最適化に基づいてこれに固執する必要があります。そしてそれは iOS 5 フレンドリーでなければなりません。

4

3 に答える 3

2

UITextAlignment は非推奨であるため、NSWritingDirection を含む NSString カテゴリを次に示します。

- (NSWritingDirection)alignment{
    if (self.length) {
        NSArray *rightLeftLanguages = @[@"ar",@"he"];
        NSString *lang = CFBridgingRelease(CFStringTokenizerCopyBestStringLanguage((CFStringRef)self,CFRangeMake(0,self.length)));
        if ([rightLeftLanguages containsObject:lang]) {
            return NSWritingDirectionRightToLeft;
        }
    }
    return NSWritingDirectionLeftToRight;

}

于 2016-01-06T08:01:42.253 に答える