SwiftUI 的无限旋转木马

PageViewer

为 SwiftUi AnyView 做出适配的 UIPageViewController

第 2 版的更改

  • 响应式修饰符。
  • 新的显示和过渡逻辑
  • 委托接受事件
  • 软件控制过渡的外部控制器
  • 您可以独立确定要忽略哪些安全区域以及哪些安全区域不忽略
  • 可以完全控制指示器的外观
  • 手势锁定
  • 在通过锚点更改索引时,不再使用 AnyView 创建 UIPageViewController 的视图数组
  • 已添加带示例的文档
  • 修复了在通过锚点更改索引时同时导航和手势崩溃的问题
  • 修复了在某个时间点完成时 Binding 上有多个新值时丢失 Binding 的问题
  • 限制同时将新值分配给 Binding 索引时的过渡(如果快速点击更改索引的按钮),这可能导致崩溃

安装

Swift 包管理器

Swift 包管理器 是一个用于自动分发 Swift 代码的工具,并且已集成到 swift 编译器中。

设置好 Swift 包后,将 PageViewer 添加为依赖项就像将其添加到 Package.swiftdependencies 值中一样简单。

dependencies: [
    .package(url: "https://github.com/cbepxbeo/page-viewer.git", .upToNextMajor(from: "0.0.1"))
]

用法

如果您不想,则无需创建自己的提供程序。默认情况下,该软件包提供了您所需的一切。

使用索引和元素从集合生成带 Binding 的 Vew。

 @State var index: Int = 0
 let collection: [Int] = [1,2,3,4,5]

 var body: some View {
     PageView(collection, index: $index) { index, element in
         VStack {
             Text("Element: \(element)")
             Text("Index: \(index)")
         }
     }
 }       

使用索引和元素从集合生成不带 Binding 的 Vew。

let collection: [Int] = [1,2,3,4,5]

var body: some View {
    PageView(collection) { index, element in
        VStack {
            Text("Element: \(element)")
            Text("Index: \(index)")
        }
    }
}

使用元素从集合生成带 Binding 的 Vew。

 @State var index: Int = 0
 let collection: [Int] = [1,2,3,4,5]

 var body: CarouselSwiftUI