Ios SwiftUI视图旋转木马幻灯片过渡错误方向

Ios SwiftUI视图旋转木马幻灯片过渡错误方向,ios,swift,xcode,swiftui,Ios,Swift,Xcode,Swiftui,我正在尝试使用过渡设置视图更改的动画。我的目标是视图从右或左滑入,旧视图从同一方向滑出,就像我示例中的选择器一样。对两个视图实现这一点没有问题,因为第一个视图总是从/向左滑入和滑出,所以我可以使用.move(edge:.leading)修改器。对于第二种观点,这是相同的想法,但却是镜像的 如果我有三个或多个视图,中间的视图必须根据前一个/下一个视图索引执行不同的转换。因此,我在ObserveObject中编写了一些代码来指定动画的外观。然而,我的代码并没有真正起作用。如果我从一个角度移动到另一个

我正在尝试使用过渡设置视图更改的动画。我的目标是视图从右或左滑入,旧视图从同一方向滑出,就像我示例中的选择器一样。对两个视图实现这一点没有问题,因为第一个视图总是从/向左滑入和滑出,所以我可以使用.move(edge:.leading)修改器。对于第二种观点,这是相同的想法,但却是镜像的

如果我有三个或多个视图,中间的视图必须根据前一个/下一个视图索引执行不同的转换。因此,我在ObserveObject中编写了一些代码来指定动画的外观。然而,我的代码并没有真正起作用。如果我从一个角度移动到另一个角度,一切都很好。但是如果我从视图0转到视图1再转到视图2,则从视图1到视图2的动画是错误的(请参见GIF)。从视图2切换回视图1后,2和1之间的转换工作正常(但现在0和1之间的转换又被搞乱了)

我做错了什么?也许有更简单的方法来做这样的事情

struct ContentView: View {
    
    @ObservedObject var settings = Settings()
    
    var body: some View {
        
        VStack{
            
            Spacer()
            
            Picker("/numbers", selection: self.$settings.viewIndex.animation(.spring())) {
                Text("View 0").tag(0)
                Text("View 1").tag(1)
                Text("View 2").tag(2)
            }
            .pickerStyle(SegmentedPickerStyle())
            
            Spacer()
            
            if(self.settings.viewIndex == 0){
                ZStack{
                    Text("View 0").font(.largeTitle)
                }.frame(width: UIScreen.main.bounds.width)
                    .transition(.move(edge: .leading))
            }
            
            if(self.settings.viewIndex == 1){
                ZStack{
                    Text("View 1").font(.largeTitle)
                }.frame(width: UIScreen.main.bounds.width)
                    .transition(.move(edge: self.settings.middleAnimationIsLeading ? .leading : .trailing))
            }
            
            if(self.settings.viewIndex == 2){
                ZStack{
                    Text("View 2").font(.largeTitle)
                }.frame(width: UIScreen.main.bounds.width)
                    .transition(.move(edge: .trailing))
            }
            
            Spacer()
        }
    }
}

class Settings: ObservableObject {
    @Published var viewIndex = 1{
        willSet(newValue){
            
            //View 1 should move from and to right edge
            if(viewIndex == 1 && newValue == 0 || viewIndex == 0 && newValue == 1){
                middleAnimationIsLeading = false
            }
            
            //View 1 should move from and to left edge
            if(viewIndex == 1 && newValue == 2 || viewIndex == 2 && newValue == 1){
                middleAnimationIsLeading = true
            }
        }
    }
    
    @Published var middleAnimationIsLeading = false {
        didSet {
            print("is leading: \(middleAnimationIsLeading)")
        }
    }
}

请附上您的完整代码以作进一步解释,这已经是完整代码(简化)。也许你可以解释什么是不清楚的?你需要寻呼机,而不是转换。问题是,如果我在堆栈上使用偏移量,我的应用程序将崩溃(SwiftUI错误),请看这里:有没有办法让它与转换一起工作?你能附上你的完整代码以获得更多解释吗?这已经是完整代码(简化)。也许你可以解释什么是不清楚的?你需要的是寻呼机,而不是转换。问题是如果我在堆栈上使用偏移量,我的应用程序将崩溃(SwiftUI错误),请看这里:没有办法让转换工作吗?