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

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...