【问题标题】:Why does my CATextLayer not respond to the contentsGravity property?为什么我的 CATextLayer 不响应 contentsGravity 属性?
【发布时间】:2015-03-11 11:43:14
【问题描述】:

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

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

textLayer.contentsGravity = kCAGravityBottomRight

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

textLayer.alignmentMode = kCAAlignmentRight

所以基本的水平对齐是有效的,但我无法在垂直空间中调整。

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

我们将不胜感激。

===

注意:CATextLayer 不是支持我的NSView 的层的子层。它支持我观点的图层类型。我通过在我的自定义NSView 中覆盖 makeBackingLayer() 来实现这一点,如下所示:

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

我把它包括在内,以防它在某种程度上相关。

【问题讨论】:

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


    【解决方案1】:

    虽然您可以将您为CATextLayer 设置的文本视为该层的内容,但这并不能使其成为该层的contents 属性中的值.事实上,我很确定 CALayercontents 属性只能是图像(或 nil)。如果值为nil,那么您为contentsGravitycontentsRectcontentsCenter 设置的值——所有这些都在这个contents 属性上运行——将什么都不做。

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

    【讨论】:

    • 有趣的是,contentsRect 确实对图层中的文本有影响。我已经用一个快速的 println() 进行了检查,但内容确实为零。那么,在您的视图中定位此文本的最佳方法是什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多