簡體   English   中英

Animation swiftui 的內部工作表不起作用

[英]Animation not working inside sheet for swiftui

我正在使用一張表來顯示選項列表,然后單擊該選項我想用 animation 從尾隨滑動來更改視圖。 根據我的理解和我在各種網站上閱讀的內容,我編寫了這段代碼,但我不確定為什么它沒有按預期方式工作。 我只想知道這段代碼到底哪里出了問題。

struct XYZ: App {
    let persistenceController = PersistenceController.shared
    @State var isPresented : Bool = false
    @State var isSwiped : Bool = false
    var body: some Scene {
        WindowGroup {
            optionList(isPresented: $isPresented)
                .sheet(isPresented: $isPresented, content: {
                    Text("This is from modal view!")
                        .onTapGesture {
                            withAnimation(Animation.easeIn(duration: 10)){
                                isSwiped.toggle()
                            }
                        }
                    if isSwiped {
                        checkedList()
                            .transition(.move(edge: .trailing))
                    }
                })
        }
    }
}
struct optionList : View {
    @Binding var isPresented : Bool
    var body: some View {
        Text("This is a testView")
            .onTapGesture {
                withAnimation{
                    isPresented.toggle()
                }
            }
    }
}

struct checkedList : View {
    @State var name : String = "WatchList"
    var arr = ["First", "Second", "Third", "Fourth", "Fifth", "Sixth", "Seventh"]
    @State var mp : [Int:Int] = [:]
    var body: some View {
        VStack{
            HStack{
                TextField("WatchlistName", text: $name)
                    .padding(.all)
                Image(systemName: "trash.fill")
                    .padding(.all)
                    .onTapGesture {
                        print("Delete watchList!!")
                    }
            }
            ScrollView{
                ForEach(arr.indices) { item in
                    HStack (spacing: 0) {
                        Image(systemName: mp.keys.contains(item) ? "checkmark.square" : "square")
                            .padding(.horizontal)
                        Text(arr[item])
                        
                    }
                    .padding(.bottom)
                    .frame(width: UIScreen.main.bounds.width, alignment: .leading)
                    .onTapGesture {
                        if mp.keys.contains(item) {
                            mp[item] = nil
                        } else {
                            mp[item] = 1
                        }
                        
                        
                    }
                }
            }
            Button {
                print("Remove Ticked Elements!")
                deleteWatchListItem(arr: Array(mp.keys))
            } label: {
                Text("Save")
            }
        }
    }
    
    func deleteWatchList(ind: Int){
        print(ind)
    }
    
    func deleteWatchListItem(arr : [Int]) {
        print(arr)
    }
}

我嘗試創建一個視圖,並在 animation 中使用withanimation和 bool 變量嘗試更改視圖。

聽起來你想要的是將checkedList推到NavigationStack上......

struct ContentView: View {

    @State var isPresented : Bool = false

    var body: some View {
        Text("This is a testView")
            .onTapGesture {
                    isPresented.toggle()
            }
            .sheet(isPresented: $isPresented, content: {
                NavigationStack {
                    NavigationLink("This is from modal view!") {
                        checkedList()

                    }
                }
            })
    }
}

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM