源码

SwiftUI(beta 6) – 动画重新排序视图

我正在寻找一种动画重新排序视图的方法。 最初我在VStack中实现了这样的视图/uff0c如下所示/uff1a

@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 ...
}

随着@State变量的更改/uff0c创建视图的顺序也可能会发生变化。 

.animate(.easeOut)

在vstack的末尾/uff0c但它只对子视图中的一些更改进行动画处理/uff0c而不是对它们的顺序进行动画处理。我也试过用列表代替vstack/uff0c但也没有运气。有没有人能告诉我如何做到这一点而不诉诸于zstack/padding胡说八道/uff1f

然后如果我把它放在foreach中/uff0c并且让我的视图依赖于这个状态/uff0c那么这在很大程度上对我有用。

@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"))
    }
}

enter image description here  

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/swiftuibeta-6-donghuazhongxinpaixushitu.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:8 月 25, 2019 at 05:29 下午

热评文章