我有一个UILabel
与字符串“LA”。我也有一个CATextLayer
具有相同的字符NSAttributedString
分配给其string
财产。字距调整UILabel
与CATextLayer
。这是代码。
- (void)viewDidLoad
{
[super viewDidLoad];
//
// UILabel
//
UILabel *label1 = [[UILabel alloc] initWithFrame:CGRectMake(20, 50, 280, 100)];
label1.text = @"LA";
label1.backgroundColor = [UIColor clearColor];
label1.font = [UIFont fontWithName:@"Futura" size:90.0];
[self.view addSubview:label1];
//
// CATextLayer
//
UILabel *label2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 130, 280, 100)];
label2.backgroundColor = [UIColor clearColor];
CATextLayer *textLayer = [[CATextLayer alloc] init];
textLayer.frame = label2.layer.bounds;
textLayer.contentsScale = [[UIScreen mainScreen] scale];
[label2.layer addSublayer:textLayer];
NSMutableAttributedString *string = [[NSMutableAttributedString alloc] initWithString:@"LA"];
CTFontRef aFont = CTFontCreateWithName((__bridge CFStringRef)@"Futura", 90.0, NULL);
[string addAttribute:(NSString*)kCTFontAttributeName value:(__bridge id)aFont range:NSMakeRange(0, [string length])];
textLayer.string = string;
[self.view addSubview:label2];
}
Here's an image http://tumtiki-github.s3.amazonaws.com/kerning.png结果。
为什么这两种方法之间的字偶距不同以及我在其中做错了什么CATextLayer
例子?
UIKit 通常使用 WebKit 进行文本渲染(如这个崩溃日志) https://stackoverflow.com/questions/12744558/uistringdrawing-methods-dont-seem-to-be-thread-safe-in-ios-6,很可能是出于性能原因。如果你真的需要超精度那么有一些custom UILabel重新实现 https://github.com/newsme/Core-Text-Label using CoreText
作为其后端。
EDIT:从 iOS7 开始,这不再是事实UILabel
使用 TextKit 进行渲染,它也基于 CoreText。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)