gpt4 book ai didi

ios - 无法控制表单中的动画?

转载 作者:行者123 更新时间:2023-12-04 13:39:53 24 4
gpt4 key购买 nike

难道不能控制在 Form View 中发生的动画吗?我在这里有一个演示这个问题的操场,以及发生了什么的 gif。如您所见,我在第二个动画 View 上的过渡完全被忽略了,我不得不手动放慢视频速度,因为持续时间也被忽略了。

我真的不想要缩放过渡,这只是为了证明无论我在那里放什么动画都是一样的。这是预期的,还是一个错误?还是我只是在做一些完全错误的事情?

我也不清楚为什么 VStack 的动画处理方式与简单的 Text 字段如此不同,后者很好地向下滑动,而 VStack 似乎获得了 .move 和 .opacity 的某种组合。

animation demo

import SwiftUI
import PlaygroundSupport


struct ContentView: View {

@State var showGoodAnimation = false
@State var showBadAnimation = false

var body: some View {
Form {
Toggle(isOn: self.$showGoodAnimation.animation(.easeInOut(duration: 1))) {Text("Yay!")}
if self.showGoodAnimation {
Text("I animate beautifully.")
}
Toggle(isOn: self.$showBadAnimation.animation(.easeInOut(duration: 1))) {Text("Boo!")}
if self.showBadAnimation {
VStack {
Text("Hi.").padding()
Text("I'm a hot mess.").padding()
}
.frame(height: 250)
.transition(.scale)
}
Text("I'm just always here.")
}
}
}

PlaygroundPage.current.setLiveView(ContentView())

最佳答案

猜测一下,前一段时间可能已经解决了这个问题,但是为了那些现在反对 SwiftUI Form 之类的人的利益(就像我一样 :-) )
事实证明,Forms、Lists 和(毫无疑问)其他组件故意忽略动画定制,因为它们是“更高级别”的 SwiftUI View 组件(与 V 和 HStack 不同)。
他们这样做是因为 SwiftUI 的高级组件旨在传达语义信息并且(更实际地)在所有平台上都能很好地工作。为实现这一目标,Apple 的工程决策一直是让动画变得“简单”,但(正如观察到的)仅在本质上将其“打开”或“关闭”的程度。
它可能是这样设计的,因为如果开发人员想要更多的控制。然后,Apple 相信鼓励他们使用较低级别的组件将比尝试解决他们应用于较高级别的 View 组件的优化更不痛苦。
无论如何,对于确定的人来说,通过将 View 包装在容器中并指定 .animation(nil) 至少有一个逃生舱口。修饰符(如 Asperi's SO answer here 中所述。
为完整起见,下面显示了一个示例;就个人而言,我正在避免这种模式,因为我怀疑它有点像枪。

import PlaygroundSupport
import SwiftUI

struct ContentView: View {
@State var showGoodAnimation = false
@State var showBadAnimation = false

var body: some View {
Form {
Toggle(isOn: self.$showGoodAnimation.animation(.easeInOut(duration: 1))) { Text("Yay!") }
if self.showGoodAnimation {
Text("I animate beautifully.")
}
Toggle(isOn: self.$showBadAnimation.animation()) { Text("Boo!") }
VStack {
if self.showBadAnimation {
List {
Text("I animated differently").padding()
Text("But am I a footgun?").padding()
}
.transition(.asymmetric(insertion: .slide, removal: .opacity))
.animation(.easeOut(duration: 5))
}
}
.animation(nil)
.transition(.slide)
Text("I'm just always here.")
}
}
}

PlaygroundPage.current.setLiveView(ContentView())

关于ios - 无法控制表单中的动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59009240/

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