gpt4 book ai didi

swift - 键路径为 "bounds"的 CABasicAnimation 不工作

转载 作者:可可西里 更新时间:2023-10-31 23:59:24 24 4
gpt4 key购买 nike

我有以下代码使用 CABasicAnimation 对 CALayer 的边界属性进行动画处理。但是代码似乎不起作用。

    let fromValue = textLabel.layer.bounds
let toValue = CGRectMake(textLabel.layer.bounds.origin.x, textLabel.layer.bounds.origin.y, textLabel.layer.bounds.width, textLabel.layer.bounds.height + 50)

let positionAnimation = CABasicAnimation(keyPath: "bounds")
positionAnimation.fromValue = NSValue(CGRect: fromValue)
positionAnimation.toValue = NSValue(CGRect: toValue)
positionAnimation.duration = 1
positionAnimation.fillMode = kCAFillModeBoth
positionAnimation.removedOnCompletion = false

textLabel.layer.addAnimation(positionAnimation, forKey: "bounds")

最佳答案

您的代码确实有效。如果您运行您的代码,然后在 Xcode 中打开 View Debugging,您将看到标签的高度增加了。 “问题”是 iOS 8 中的 UILabel 以相同的方式绘制自身(其文本和背景,如果有的话),即使在以这种方式人为增加其层高之后也是如此。 (我认为这是因为标签使用基于其文本内容的特殊裁剪区域绘制自身。)

为了向自己证明这一点,请在普通的 UIView(具有彩色背景)而不是标签上进行尝试。我冒昧地清理了你的代码(你永远不应该滥用 fillModeremovedOnCompletion 你正在做的事情 - 它只是表明缺乏对动画是什么的理解):

    let fromValue = view2.layer.bounds.height
let toValue = view2.layer.bounds.height + 50
CATransaction.setDisableActions(true)
view2.layer.bounds.size.height = toValue
let positionAnimation = CABasicAnimation(keyPath: "bounds.size.height")
positionAnimation.fromValue = fromValue
positionAnimation.toValue = toValue
positionAnimation.duration = 1
view2.layer.addAnimation(positionAnimation, forKey: "bounds")

您会发现它运行良好。现在将 view2 整个改回 textLabel。它仍然有效,只是没有什么可看的。

向自己证明这一点的另一种方法是放下整个动画,只更改标签的层高:

    self.textLabel.layer.bounds.size.height += 50

你不会看到任何事情发生。所以你的动画中没有错误;一切都与标签的绘制方式有关。

您可以通过更改 View 而不是来使更改可见:

    self.textLabel.bounds.size.height += 50

不过,还有一个“问题”是动画不是动画。同样,这是因为标签是以特殊方式绘制的。

因此,无论您想要完成什么,都必须以不同的方式来完成。您可能在彩色 View 前面有一个清晰的标签,并为 View 的高度变化设置动画;我们已经证明这是可行的。

关于swift - 键路径为 "bounds"的 CABasicAnimation 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27576357/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com