重新进入屏幕时,Swift 动画不起作用

问题描述 投票:0回答:0

我已经构建了一个带有动画的视图,一切似乎都工作正常,但后来我发现它只适用于第一次,而不适用于第二次。由于我是 Swift 编程的新手,我不知道问题出在哪里。我查看了不同的动画教程,并且所有教程的工作方式都与我实现它的方式相同。我写了一个小样本来重现该问题:

import SwiftUI

struct BugSample: View {
    var body: some View {
        TabView {
            ContentView()
                .tabItem {
                    Label("BUG", systemImage: "checkmark")
                }
        }
    }
}

struct Person: Identifiable, Hashable {
    var id: UUID
    var name: String
    
    init(id: UUID = UUID(), name: String) {
        self.id = id
        self.name = name
    }
}

struct ContentView: View {
    @State private var selectedPerson: Person?
    
    var body: some View {
        NavigationSplitView {
            PersonsListView(selectedPerson: $selectedPerson)
        } detail: {
            if let selectedPerson {
                GalleryView()
            } else {
                Text("Should not reach here")
            }
        }
    }
}

struct PersonsListView: View {
    @Binding var selectedPerson: Person?
    
    var data = [Person(name: "A"), Person(name: "B"), Person(name: "C")]
    
    var body: some View {
        List(data, selection: $selectedPerson) { entry in
            Text(entry.name)
                .onTapGesture {
                    selectedPerson = entry
                }
                .listRowSeparator(.hidden)
        }
    }
}

struct GalleryView: View {
    var body: some View {
        NavigationStack {
            VStack(spacing: 20) {
                ProgressView()
                CircularView()
            }
        }
    }
}

struct CircularView: View {
    @State var scale = 1.0

    var body: some View {
        Circle()
            .frame(width: 200, height: 200)
            .scaleEffect(scale)
            .onAppear {
                let baseAnimation = Animation.easeInOut(duration: 1)
                let repeated = baseAnimation.repeatForever(autoreverses: true)

                withAnimation(repeated) {
                    scale = 0.5
                }
            }
    }
}

当您单击 3 个条目之一时,圆圈将正确动画,当我返回并再次打开屏幕时,它将不起作用。我还添加了一个 ProgressView 来检查它是否有效并且它正在旋转,所以问题可能出在代码中。 我的第一个建议是 NavigationSplitView,因为我发现存在缺少动画的问题,但它与我的问题不同(https://forums.developer.apple.com/forums/thread/728132)。 有人对这个问题有想法吗?在过去的几个小时里我尝试了几种方法,但我找不到让动画再次工作的方法。

ios swift animation
© www.soinside.com 2019 - 2024. All rights reserved.