ios – 一种发现文字书写方向的较轻方式

前端之家收集整理的这篇文章主要介绍了ios – 一种发现文字书写方向的较轻方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想确定一个字符串的书写方向,这样我就可以在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友好的.

解决方法

问题中的代码虽然功能上很残酷.通过分析器运行它,当在图层的drawInContext方法中使用时,您会发现它在UITextView.setText中花费的时间接近80%.

大部分答案都在Detect Language of NSString

因此,一个更好的形式……

+(UITextAlignment)alignmentForString:(NSString *)astring
{

    if (astring.length) {

        NSArray *rightLeftLanguages = @[@"ar",@"he"];

        NSString *lang = CFBridgingRelease(CFStringTokenizerCopyBestStringLanguage((CFStringRef)astring,CFRangeMake(0,[astring length])));

        if ([rightLeftLanguages containsObject:lang]) {

            return UITextAlignmentRight;

        }
    }

    return UITextAlignmentLeft;

}

因为阿拉伯语和希伯来语是CFStringTokenizerCopyBestStringLanguage可以检测到的唯一的从右到左语言,并且还应该涵盖波斯语,乌尔都语和意第绪语,尽管我还没有测试过.

另见http://en.wikipedia.org/wiki/Right-to-left

原文链接:https://www.f2er.com/iOS/330931.html

猜你在找的iOS相关文章