如何解决SwiftUI - 显式动画的快速序列产生奇怪的动画
以下代码包含一个文本列表和一个用于添加更多文本的按钮。添加项目后,滚动视图应滚动到倒数第二个(在本示例中为简单起见)项目。
import SwiftUI
struct ContentView: View {
@StateObject private var viewmodel = viewmodel()
var body: some View {
createView()
}
private func createView() -> some View {
return vstack {
ScrollView {
ScrollViewReader { scrollProxy in
vstack {
ForEach(viewmodel.ids,id: \.self) { id in
Text(viewmodel.texts[id]!)
.padding()
}
}.onAppear {
viewmodel.scrollProxy = scrollProxy
}
}
}
Button("Add") {
viewmodel.onAdd()
}.padding()
}
}
}
class viewmodel: ObservableObject {
@Published var ids: [UUID]
@Published var texts: [UUID: String]
@Published var responderID: UUID?
var scrollProxy: ScrollViewProxy?
init() {
let id = UUID()
self.ids = [id]
self.texts = [id: "0"]
}
func onAdd() {
let lastID = ids[ids.count - 1]
// create new block
let newID = UUID()
ids.append(newID)
self.texts[newID] = String(ids.count)
withAnimation {
scrollProxy?.scrollTo(lastID)
}
}
}
缓慢点击按钮时,滚动动画效果很好。
但是当按钮被快速点击时,动画...坏了?动画缓慢到爬行,需要很长时间才能完成。
所以我的问题是,还有另一种动画滚动的方法吗?我试过使用 CAdisplayLink,但结果也很糟糕...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。