我想确定一个字符串的书写方向,这样我就可以在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;
}
Run Code Online (Sandbox Code Playgroud)
工作正常,但感觉有点沉重只是为了发现哪种方式来调整我的文本,特别是在drawInContext中调用它(尽管相对不频繁).
是否有一种较轻的方法来确定给定字符串的书写方向,或者我应该在过早优化的基础上坚持这一点.它必须是iOS 5友好的.
War*_*ton 14
问题中的代码虽然功能上很残酷.通过分析器运行它,您会发现它UITextView.setText在图形的drawInContext方法中使用时花费了近80%的时间.
大多数答案都在NSString的Detect Language中
因此,一个更好的形式......
+(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;
}
Run Code Online (Sandbox Code Playgroud)
阿拉伯语和希伯来语是唯一可以检测到的,从CFStringTokenizerCopyBestStringLanguage而且也应该包括波斯语,乌尔都语和意第绪语的从右到左语言,尽管我还没有测试过.
另见http://en.wikipedia.org/wiki/Right-to-left
| 归档时间: |
|
| 查看次数: |
2146 次 |
| 最近记录: |