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

标签 objective-c cocoa core-animation calayer nsview

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

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

textLayer.contentsGravity = kCAGravityBottomRight

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

textLayer.alignmentMode = kCAAlignmentRight

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

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

任何帮助将不胜感激。

===

注意:CATextLayer不是支持我的NSView的图层的子图层。它是支持我的 View 的图层类型。我通过在自定义 NSView 中重写 makeBackingLayer() 来实现此目的,如下所示:

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

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

最佳答案

尽管您可以将您为 CATextLayer 设置的文本视为该图层的内容,但这并不意味着它就是 中的值该图层的 >contents 属性。事实上,我非常确定 CALayercontents 属性只能是图像(或 nil)。如果值为 nil,则为 contentsGravitycontentsRectcontentsCenter 设置的值 - 所有这些都对此进行操作contents 属性 - 不会执行任何操作。

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

关于objective-c - 为什么我的 CATextLayer 不响应contentsGravity 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28985760/

相关文章:

ios - 如何在带圆角的 super View 中翻转非全屏 UIView?

iphone - CATransform3DRotate 和 UIImageView

objective-c - 同步 iOS 和 Mac OS X 数据

ios - 在全局队列中停止 NSRunLoop

cocoa - super 中的方法无论如何都会被子类化 (Cocoa)

objective-c - UIButton 调用选择器会使应用程序崩溃

ios - 根据路径属性为 CAShapeLayer 的子类自定义属性设置动画

ios - 如何更改 iphone 应用程序中的语言运行时?

ios - 如何在 UINavigationController 的 View 下为 UIView 设置动画

iphone - 旋转时 UIBezierPath containsPoint 的问题