SwiftUI (beta 6) - 对视图进行动画重新排序

der*_*ahc 2 ios swift swiftui

我正在寻找一种方法来动画视图的重新排序。最初我在 VStack 中实现了视图,如下所示:

@State var someState: State

var body: some View {
    VStack {
        createView(forType: someState.orderedTypes[0])
        createView(forType: someState.orderedTypes[1])
        createView(forType: someState.orderedTypes[2])
    }
}

func createView(forType type: SomeExampleType) -> some View {
    return ...
}
Run Code Online (Sandbox Code Playgroud)

当 @State 变量发生变化时,创建视图的顺序也可能发生变化。我最初尝试钉住

.animate(.easeOut)
Run Code Online (Sandbox Code Playgroud)

在 VStack 的末尾,但它只对子视图中的一些变化进行动画处理,而不是它们的顺序。我也尝试过使用 List 而不是 VStack,但也没有运气。有人对我如何在不诉诸一些 hacky ZStack/padding 废话的情况下完成这个任务有任何建议吗?

Pro*_*in8 6

这在很大程度上对我有用,只要你把它放在a中ForEach并且你的观点取决于你所在的州。

@State var items: [Int] = [1, 2, 3, 4, 5]

var body: some View {
    VStack {
        ForEach(items, id: \.self) {
            self.view(with: $0 % 2 == 0 ? .text : .image)
        }
        .animation(.default)

        Button("Randomize") {
            self.items.shuffle()
        }
    }
}

private func view(with type: ViewType) -> some View {
    switch type {
    case .text:
        return AnyView(Text("text"))
    case .image:
        return AnyView(Image(systemName: "house"))
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述