Properties 属性不应用于CATextLayer

Properties 属性不应用于CATextLayer,properties,core-animation,catextlayer,Properties,Core Animation,Catextlayer,我试图将我的CATextLayer文本(是一个数字“1”)放在视图的中心,但我得到的是非常小的文本,而不是如图所示的中心。显示的红色圆圈是一个CALayer对象本身,它是动画的,所以我不想将文本作为子层添加到它。相反,我添加了作为子层来查看。我为CATextLayer编写的代码是: CATextLayer *numbers = [CATextLayer layer]; numbers.string = @"1"; numbers.font = [UIFont fontWithName:@"Ar

我试图将我的
CATextLayer
文本(是一个数字“1”)放在视图的中心,但我得到的是非常小的文本,而不是如图所示的中心。显示的红色圆圈是一个
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];

我希望我的问题是清楚的。请告诉我哪里弄错了?非常感谢。

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

原始答案 正确的字体名称是
“ArialMT”
。由于您使用的是不存在的字体名称,因此文本将获取默认字体和大小

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

如果希望文本显示在文本层框架内的中心位置,可以通过将层的
contentsGravity
更改为类似
kCAGravityCenter
的值来更改相对于层边界绘制层内容(在本例中为文本)的方式


  • 是获取特定字体时应使用的名称的重要资源
  • 这可以通过给文本层一个强烈的背景色,比如清晰的蓝色(因为你的圆圈是红色的)来轻松验证
  • 编辑
    font
    属性采用CGFontRef而不是UIFont。您可以使用
    CGFontCreateWithFontName((CFStringRef)@“ArialMT”)
    创建一个。使用
    fontSize
    属性设置字体大小

    原始答案 正确的字体名称是
    “ArialMT”
    。由于您使用的是不存在的字体名称,因此文本将获取默认字体和大小

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

    如果希望文本显示在文本层框架内的中心位置,可以通过将层的
    contentsGravity
    更改为类似
    kCAGravityCenter
    的值来更改相对于层边界绘制层内容(在本例中为文本)的方式


  • 是获取特定字体时应使用的名称的重要资源
  • 这可以通过给文本层一个强烈的背景色,比如清晰的蓝色(因为你的圆圈是红色的)来轻松验证

  • 现在使用
    numbers.alignmentMode=kCAAlignmentCenter
    将我的文本放在中间。但字体大小和文字并没有改变,即使我尝试了“阿里亚姆特”和其他字体。其次,我注意到我的文字隐藏在红色圆圈后面。他们有没有办法把我的文字放在最上面?愚蠢的我。。。字体属性是
    CGFontRef
    ,而不是
    UIFont
    。您应该分别设置字体和字体大小(更新答案)。您可以通过更改
    zPosition
    将1移动到图层上方,或仅将其添加到圆圈后面(或者使用下面的
    insertSublayer:在文本层后面插入圆圈:
    你说得对,大卫。我应该分别设置字体和字体大小。我不需要设置为子层,因为我已经更改了文本的颜色。它现在工作得很好:)谢谢你的链接。它肯定会在将来帮助我:)现在使用
    numbers.alignmentMode=kCAAlignmentCenter
    将我的文本放在中间。但字体大小和文字并没有改变,即使我尝试了“阿里亚姆特”和其他字体。其次,我注意到我的文字隐藏在红色圆圈后面。他们有没有办法把我的文字放在最上面?愚蠢的我。。。字体属性是
    CGFontRef
    ,而不是
    UIFont
    。您应该分别设置字体和字体大小(更新答案)。您可以通过更改
    zPosition
    将1移动到图层上方,或仅将其添加到圆圈后面(或者使用下面的
    insertSublayer:在文本层后面插入圆圈:
    你说得对,大卫。我应该分别设置字体和字体大小。我不需要设置为子层,因为我已经更改了文本的颜色。它现在工作得很好:)谢谢你的链接。它肯定会在将来帮助我:)