我有一个懒加载网格视图,定义如下:
let column = Array(repeating: GridItem(.flexible(minimum: 120, maximum: .infinity)), count: 3)
LazyVGrid(columns: column, alignment: .leading, spacing: 5) {
ForEach(data, id: \.self.uniqueStableId) { _ in
Color.red
.transition(.move(edge: .trailing))
.frame(height: 150)
}
}
我有一个按钮,它可以启动一个动画效果:
func handleButtonTap() {
for index in 0..<9 {
DispatchQueue.main.asyncAfter(deadline: .now() + Double(1 * index)) {
withAnimation(.easeInOut(duration: 1)) {
let newItem = Item()
self.data.append(newItem)
}
}
}
}
动画应该使用滑动效果,每隔1秒将新的红色方块逐个添加到网格中,但是有两个问题:
- 即使我为红色视图设置了特定的过渡效果,过渡仍被忽略,方块以淡入效果添加
- 每次在网格上的新行中添加第一个方块时,它会从该行中间出现,并开始垂直滑动,同一行中的下一个方块则以淡入方式出现
看起来我把过渡和动画设置在了错误的位置,因为即使我从红色视图中删除.transition,它仍然以相同的方式进行动画。无法理解是什么控制了它
有人有调整它正常工作的提示吗? 谢谢!