相关疑难解决方法(0)

导航视图中的SwiftUI自定义动画过渡?

SwiftUI 中是否有一种方法可以更改 NavigationView/NavigationLink 的标准行为,即从一个视图滑动到下一个视图?我想要一个自定义动画/过渡,如淡入/淡出。

我现在尝试了一段时间并解决了一半,但在后半部分苦苦挣扎。这段代码:

struct ContentView: View {
    @State var appeared: Double = 0.0

    var body: some View {
        NavigationView {
            VStack {
                Text("\(appeared)")
                NavigationLink(destination: ViewB()) {Text("go to View B")}
            }
            .opacity(appeared)
            .animation(Animation.easeInOut(duration: 3.0), value: appeared)
            .onAppear {self.appeared = 1.0}
            .onDisappear {self.appeared = 0.0}
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

视图出现时工作正常。它通过在 3 秒内将不透明度更改为 1.0 来淡入。都好。但是当单击NavigationLink, 转到视图 B 时,它会滑开此视图,并且视图 B(具有相同的逻辑)缓慢淡入。我想这是因为onDisappear实际上是在视图消失时触发,而不是在它即将离开时触发。

是否有机会告诉 SwiftUI 不要滑动或滑动,而是执行自定义动画/过渡?

我正在使用 Xcode 11.2.1

swiftui swiftui-navigationlink

9
推荐指数
1
解决办法
6641
查看次数

NavigationView / NavigationLink 自定义过渡方向

我试图NavigationLink从屏幕底部加载视图,而不是从右侧转换,但“明显”的方法(使用 a .transition(.move(edge: .bottom)))似乎没有任何效果。

下面是里面的NavigationView

List {
    ForEach(self.message, id: \.self) { message in
        HStack(alignment: .center) {
            MessageListCell(....)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

MessageListCell

    var body: some View {
        HStack {
            VStack(alignment: .leading, spacing: 0) {
                Text(person.firstName).lineLimit(1)
                    .foregroundColor(.main)
            }
            Spacer()
            NavigationLink(destination: MessageDetail(otherPerson: otherPerson,
                                                   subject: subject,
                                                   profileHandler: { ProfileReducer($0) })
                .transition(.move(edge: .bottom)),
                           tag: 1, selection: $action) {
                NextButton("Proceed")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

NextButton从屏幕右侧而不是底部点击一致的过渡。我已经尝试过上述方法的变体,但我开始认为这transition可能不是正确的方法。

swiftui swiftui-navigationlink

7
推荐指数
0
解决办法
4914
查看次数

SwiftUI 动态添加子视图但动画不起作用

我想在 SwiftUI 中创建一个视图,动态添加一个带有动画的子视图。

struct ContentView : View {
    @State private var isButtonVisible = false

    var body: some View {
        VStack {
            Toggle(isOn: $isButtonVisible.animation()) {
                Text("add view button")
            }

           if isButtonVisible {
                 AnyView(DetailView())
                      .transition(.move(edge: .trailing))
                      .animation(Animation.linear(duration: 2))
             }else{
                    AnyView(Text("test"))
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码可以很好地处理动画。但是,当我将视图选择部分移动到函数中时,动画不再起作用(因为我想动态添加不同的视图,因此,我将逻辑放在一个函数中。)


struct ContentView : View {
    @State private var isButtonVisible = false
    var body: some View {
        VStack {
            Toggle(isOn: $isButtonVisible.animation()) {
                Text("add view button")
            }

            subView().transition(.move(edge: .trailing))
                     .animation(Animation.linear(duration: 2))   
    }

     func subView() -> some View {
         if …
Run Code Online (Sandbox Code Playgroud)

iphone ios swift swift5 swiftui

4
推荐指数
1
解决办法
3841
查看次数

标签 统计

swiftui ×3

swiftui-navigationlink ×2

ios ×1

iphone ×1

swift ×1

swift5 ×1