属性不适用于CATextLayer

时间:2012-07-23 19:48:45

标签: properties core-animation catextlayer

我正在尝试将CATextLayer文本(这是一个数字" 1")放在视图中心,但我得到的是非常小的文本而不是中心,如{ {3}}图片。显示的红色圆圈是一个CALayer对象本身,它是动画的,因此我不想将文本作为子图层添加到其中。相反,我添加了子视图来查看。我为CATextLayer编写的代码是:

CATextLayer *numbers = [CATextLayer layer];

numbers.string = @"1";
numbers.font = [UIFont fontWithName:@"Arial" size:100.0];
numbers.foregroundColor = [UIColor blackColor].CGColor;
numbers.bounds = CGRectMake(0, 0, 200, 200);
numbers.position = self.view.center;
numbers.wrapped = NO;

[self.view.layer addSublayer:numbers];

我希望我的问题很明确。请告诉我在哪里弄错了?非常感谢。

1 个答案:

答案 0 :(得分:1)

修改

font属性采用CGFontRef而不是UIFont。您可以使用CGFontCreateWithFontName( (CFStringRef)@"ArialMT" )创建一个。字体大小使用fontSize属性设置。

原始答案

正确的字体名称为"ArialMT" 1。由于您使用的是不存在的字体名称,因此文本将获得默认字体和大小。

该层实际上是居中的,200乘200点 2 。问题是文本不在文本层内居中,而是文本位于左上角。一个更大的字体可以使它看起来几乎居中,但它仍然不会。

如果需要,可以通过将图层的contentsGravity更改为kCAGravityCenter来更改图层内容(在您的情况下为文本)相对于图层边界的绘制方式要在文本图层框架内居中显示的文本


  1. iOS Fonts是您用于获取某些字体的名称的绝佳资源。
  2. 通过为文本图层提供强烈的背景色(如蓝色)(因为您的圆圈为红色),可以轻松验证这一点。