为什么我的CATextLayer不响应contentsGravity属性?

时间:2015-03-11 11:43:14

标签: objective-c cocoa core-animation calayer nsview

我正在使用layer-backed NSView创建一个Cocoa应用。我已经将支持视图的图层自定义为CATextlayer类型,因为此视图的主要用途是显示一些文本。

我在init过程中包含以下行,但它不适用于我尝试的任何contentGravity常量:

textLayer.contentsGravity = kCAGravityBottomRight

另一方面,以下内容确实生效:

textLayer.alignmentMode = kCAAlignmentRight

所以基本的水平对齐工作正常,但我无法在垂直空间进行调整。

CATextLayer中指定文字位置的最佳方法是什么?我一直在尝试修改支持归因字符串中的NSParagraphStyle属性但是这似乎也无法定位文本?

非常感谢任何帮助。

===

注意:CATextLayer 支持我NSView的图层的子层。 支持我视图的图层类型。我通过在我的自定义NSView中覆盖makeBackingLayer()来实现此目的,如下所示:

override func makeBackingLayer() -> CALayer {
  return CATextLayer()
}

我包含以防万一它与某种程度相关。

1 个答案:

答案 0 :(得分:1)

虽然您可以将为CATextLayer设置的文字视为此图层的内容,但这并不会使其成为contents中的值该层的属性。事实上,我非常确定contents的{​​{1}}属性只能是图像(或零)。如果值为CALayer,则您为nilcontentsGravitycontentsRect设置的值 - 所有这些值都在此contentsCenter属性上运行 - 将不执行任何操作。< / p>

我的猜测是文本图层的contents属性为nil(无论你设置的是什么文本值,都将保持为nil),这就是为什么没有发生的原因。