微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SwiftUI 中的双向无限 PageView

如何解决SwiftUI 中的双向无限 PageView

我正在尝试制作一个双向 TabView(带有 .tabViewStyle(PageTabViewStyle(indexdisplayMode: .never))),其数据源会随着时间的推移而改变。

以下是描述结果中预期内容代码

class Tabsviewmodel: ObservableObject {
    @Published var items = [-2,-1,1,2]
    @Published var selectedItem = 2 {
        didSet {
            if let index = items.firstIndex(of: selectedItem),index >= items.count - 2 {
                items = items + [items.last! + 1]
                items.removeFirst()
            }
            
            if let index = items.firstIndex(of: selectedItem),index <= 1 {
                items = [items.first! - 1] + items
                items.removeLast()
            }
        }
    }
}

struct TabsView: View {
    @StateObject var vm = Tabsviewmodel()
    
    var body: some View {
        TabView(selection: $vm.selectedItem) {
            ForEach(vm.items,id: \.self) { item in
                Text(item.description)
                    .frame(minWidth: 0,maxWidth: .infinity,minHeight: 0,maxHeight: .infinity,alignment: .topLeading
                    )
                    .background(Color(hue: .random(in: 0...0.99),saturation: .random(in: 0...0.99),brightness: 0.5))
            }
        }
        .tabViewStyle(PageTabViewStyle(indexdisplayMode: .never))
    }
}

在这种情况下,当您尝试转到下一页上一页时,动画会中断,原始页面会立即返回到原来的位置。

在没有 UIKit 和第三方框架帮助的情况下,是否可以使用 TabView 完全实现这一点?

我猜测可能的解决方案之一是在过渡动画完成时更改数据源,但我找不到在 SwiftUI 中执行此操作的方法
我的猜测正确吗?也许还有其他更优雅的方式来实现这个功能,但我的观点是错误的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。