gpt4 book ai didi

ios - SwiftUI 动画和后续的反向动画到原始状态

转载 作者:行者123 更新时间:2023-12-02 15:17:32 25 4
gpt4 key购买 nike

我正在使用 SwiftUI,并且我想在 View 出现时立即对其进行动画处理(动画的显式类型并不重要),以便在我的应用程序中进行演示。假设我只想放大 View ,然后再次将其缩小到原始大小,我需要能够将 View 动画化到新状态,然后立即返回到原始状态。这是我迄今为止尝试过的示例代码:

import SwiftUI
import Combine

struct ContentView: View {
@State private var shouldAnimate = false
private var scalingFactor: CGFloat = 2

var body: some View {
Text("hello world")
.scaleEffect(self.shouldAnimate ? self.scalingFactor : 1)
.onAppear {
let animation = Animation.spring().repeatCount(1, autoreverses: true)
withAnimation(animation) {
self.shouldAnimate.toggle()
}
}
}

显然这并不能完全满足我的要求,因为 letanimation = Animation.spring().repeatCount(1, autoreverses: true) 仅确保动画(到新状态)正在执行通过使用平滑的 autoreverse = true 设置重复,这仍然会导致 View 缩放到 scalingFactor 的最终状态。

因此,我在 animation 上找不到任何属性,可以让我自动将动画反转回原始状态(无需在第一个动画后与 View 交互),我也没有找到找到有关如何确定第一个动画何时实际完成的信息,以便能够触发新的动画。

我发现在某些 View 出现时对其进行动画处理是很常见的做法,例如只是为了展示该 View 可以交互,但最终不会改变 View 的状态。例如,为按钮上的反弹效果设置动画,最终将按钮设置回其原始状态。当然,我找到了几种建议与按钮交互以触发反向动画回到原始状态的解决方案,但这不是我想要的。

最佳答案

如果您定义动画需要多长时间,则另一种方法有效:

struct ContentView: View {
@State private var shouldAnimate = false
private var scalingFactor: CGFloat = 2

var body: some View {
Text("hello world")
.scaleEffect(self.shouldAnimate ? self.scalingFactor : 1)
.onAppear {
let animation = Animation.easeInOut(duration: 2).repeatCount(1, autoreverses: true)
withAnimation(animation) {
self.shouldAnimate.toggle()
}
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
withAnimation(animation) {
self.shouldAnimate.toggle()
}
}
}
}
}

关于ios - SwiftUI 动画和后续的反向动画到原始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61971886/

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