gpt4 book ai didi

ios - 无法使用 Swift 为 UILabel 设置动画

转载 作者:行者123 更新时间:2023-11-28 13:21:24 25 4
gpt4 key购买 nike

我正在尝试为 View 中的标签设置动画。我想显示标签 1,然后显示标签 2,然后删除标签 2。但是 label2 总是被删除。如果我删除最后一个关键帧 block (“删除”label2),它会正确显示。

代码如下:

override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)

let pos1 = self.label1.frame
let pos2 = self.label2.frame

self.label1.frame = CGRect(x: self.view.center.x, y: -10, width: 0, height: 0)
self.label2.frame = CGRect(x: pos2.origin.x, y: self.view.frame.height+10, width: 0, height: 0)

UIView.animateKeyframesWithDuration(1.5, delay: 0.0, options: nil, animations: {
UIView.addKeyframeWithRelativeStartTime(0.0, relativeDuration: 0.4, animations: {
self.label1.frame = pos1
})

UIView.addKeyframeWithRelativeStartTime(0.4, relativeDuration: 0.4, animations: {
self.label2.frame = pos2
})

UIView.addKeyframeWithRelativeStartTime(1.0, relativeDuration: 0.5, animations: {
self.label1.frame = CGRect(x: pos2.origin.x, y: self.view.frame.height + 10, width: 0, height: 0)
})

}, completion: nil)
}

最佳答案

来自referenceaddKeyframeWithRelativeStartTime... 中的计时参数是 0..1 范围内的值,这些值相对于动画的整个持续时间进行解释,而不是以秒为单位的值。所以指定一个开始时间为 1.0 的关键帧表示在整个动画结束时开始动画。将开始时间更改为 0.0/1.5、0.5/1.5、1.0/1.5,并将持续时间更改为 0.4/1.5 和 0.5/1.5。

override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)

let pos1 = self.label1.frame
let pos2 = self.label2.frame

self.label1.frame = CGRect(x: self.view.center.x, y: -10, width: 0, height: 0)
self.label2.frame = CGRect(x: pos2.origin.x, y: self.view.frame.height + 10, width: 0, height: 0)

UIView.animateKeyframes(withDuration: 1.5, delay: 0.0, options: [], animations: {
UIView.addKeyframe(withRelativeStartTime: 0.0 / 1.5, relativeDuration: 0.4 / 1.5, animations: {
self.label1.frame = pos1
})

UIView.addKeyframe(withRelativeStartTime: 0.4 / 1.5, relativeDuration: 0.4 / 1.5, animations: {
self.label2.frame = pos2
})

UIView.addKeyframe(withRelativeStartTime: 1.0 / 1.5, relativeDuration: 0.5 / 1.5, animations: {
self.label1.frame = CGRect(x: pos2.origin.x, y: self.view.frame.height + 10, width: pos1.size.width, height: pos1.size.height)
})

}, completion: nil)
}

似乎动画 View 大小也存在问题。仅使用最终大小(请注意,在这种情况下,您应该看到标签从 0x0 开始并增长到它们的最终大小,但它们没有)因此将最后一帧中的大小设置为 0x0 会使 label1 通过整个动画。更改代码以保持大小,它似乎工作正常。如果您真的想将大小动画化为零,您可能需要通过缩放来动画化变换属性。

关于ios - 无法使用 Swift 为 UILabel 设置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25312503/

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