更改 CATextLayer 的高度时文本跳转

The text jumps when changing the height of a CATextLayer

当我更改 CATextLayer 的高度时,新文本从上方(或下方)进入,如下图所示。我怎样才能防止这种情况发生?

@IBAction func Tap(sender: UIButton) {
    counter += 1
    CATransaction.begin()
    CATransaction.setAnimationDuration(8.0)
    txtLay!.frame = frameFromCounter()
    CATransaction.commit()
}

CATextLayer 通过 drawInContext: 方法绘制自身,因此对渲染表示的任何更改(例如更改 string 属性)也会修改 contents层的。在您的情况下,您正在调整图层大小,导致后备存储调整大小,这会更改 contents,从而向 属性.

添加隐式动画

如果您不希望动画发生,您可以使用 actions 字典来禁用隐式 contents 动画:

txtLay!.actions = ["contents" : NSNull()]

但是,禁用 contents 动画会在这种情况下导致跳跃,因此您最好不要更改 CATextLayer 的边界,而只是将其嵌入到超层中以提供任何额外 styling/layout 你想要的。