Apple Photos collectionview 捏合缩放如何工作?

How Apple Photos collectionview pinch zoom works?

如果您转到 Apple 照片并进行双指缩放,您可以缩放 in/out 以更改网格中的列数。我假设它使用UICollectionView,但是,我不知道它是如何获得这个动画的。

以编程方式更改 UICollectionView 中的列数并不难,我不太了解动画。

有什么想法吗?

看起来这个手势触发了一个新的布局。有一整个 class 致力于优雅地在布局之间切换:UICollectionViewTransitionLayout。文档部分说:

You can use UICollectionViewTransitionLayout as-is or subclass it to provide specialized behavior for your app. A common use for transition layouts is to create interactive transitions, such as those that are driven by gesture recognizers or touch events.

与常规的基于时间的动画不同,布局之间的转换由您更新的 transitionProgress 属性 驱动,因此转换可以轻松跟踪手势。您可以在“照片”中确切地看到发生的那种事情:如果您在捏合和缩放之间交替,过渡会通过来回跟踪。

照片可能会使用 UICollectionViewTransitionLayout 的子class 来提供更完美的用户体验,但如果您想模仿照片的功能,我认为这 class 是正确的开始方式。