如何使用 UIPageViewController 实现像 iOS Photos 应用一样的照片滑动?

Posted

技术标签:

【中文标题】如何使用 UIPageViewController 实现像 iOS Photos 应用一样的照片滑动?【英文标题】:How can I implement the photos swiping like iOS Photos app using the UIPageViewController? 【发布时间】:2019-01-21 06:38:51 【问题描述】:

假设我有大量 photoId,我可以在 Photos APP requestPhoto API 中使用它们来获取照片。我怎样才能实现UIPageViewController 来容纳这样一个大数组。在向左/向右滑动时不会为每张照片创建视图控制器会导致应用程序性能下降。有人可以提出更好的方法吗?我到处寻找,但找不到任何东西。我想解决这个问题的另一种方法是'如何使用动态数据集而不是静态数字来实现@​​987654324@?

【问题讨论】:

您可以改用CollectionView 您可以使用CollectionView 构建您的自定义解决方案,也可以使用第三方开源库,例如iCarousel github.com/nicklockwood/iCarousel 您可以从视频中获得帮助:youtube.com/watch?v=Tl0ZbKR23LE Brain 展示了一个演示 【参考方案1】:

我建议以下方法

    为您的照片界面使用 UICollectionView。 为集合视图选择水平滚动,以便您的用户可以左右滑动。

    datasource 数组可以保存您的照片的来源,并允许您的照片查看器是动态的。只需更新数组并在 collectionview 上触发 reloadData() 即可刷新 UI。如果您不想让用户知道刷新,您可以跟踪用户上次查看的项目并在刷新时滚动到该项目。

    Collectionview 会自动为您处理内存,因此您不必担心。

【讨论】:

这就是我实现缩略图照片视图的方式。我实际上是在谈论详细视图,用户在单击集合视图缩略图时在详细视图之间向左/向右滚动,而不必一直返回到缩略图视图。 详细视图可以有一个集合视图,每个单元格都适合屏幕(或者您希望放大视图有多大)。一旦用户在一张图像的详细视图中,他可以向左或向右滑动以查看其他图像。 有趣!我不知道。谢谢你。接受我的投票【参考方案2】:

对于其他在同一问题上苦苦挣扎的人。我发现这个视频很有帮助。 https://www.youtube.com/watch?v=ItdPXinQOp8?

据此,我用lazy var 制作了一个数组,用于推送数组中的所有视图控制器。视图控制器仅在需要时才加载,以防止任何性能下降。因此,如果您有 n 个视图控制器并不重要。

所以基本上方法是:

    拥有一个数组,其中包含您想要滑动的所有 imageID 创建一个惰性 var newArray,它将遍历 imageIDs(Array) 并通过 api 调用获取图像。不用担心它只会在需要时调用 api。使用接收到的图像初始化详细视图控制器,并将视图控制器推送到 newArray 中。 使用新形成的所有视图控制器数组,像往常一样设置 UIPagecontroller 委托。

【讨论】:

以上是关于如何使用 UIPageViewController 实现像 iOS Photos 应用一样的照片滑动?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用自动布局(约束)将子视图添加到 UIPageViewController?

如何使用 Scroll TransitionStyle 阻止 UIPageViewController 上的点击手势

如何更改 UIPageViewController 中的按钮名称

如何使用 UIPageViewController 实现像 iOS Photos 应用一样的照片滑动?

如何使用 UIPageViewController 跳转到特定页面?

故事板:如何使用故事板为 UIPageViewController 设置初始视图控制器?