走马灯 (Zoetrope)

在 SwiftUI 中创建基于帧的动画,包括对动态图片的支持。

概述

走马灯提供了三个原生 SwiftUI 视图:

所有三个视图都允许您指定一个开始日期,以便相对于该日期进行动画。这允许您在多个视图之间同步播放,甚至在多个设备之间同步播放,只要它们的时钟同步即可。

提示

例如,支持循环 GIF 头像的社交应用(如 Mastodon/Fediverse 客户端)可以使用个人资料的创建日期作为动画开始日期。如果同一房间里的两个人正在查看同一个个人资料或帖子,他们会看到头像在他们的设备之间同步播放。 🪄 太神奇了!

图像格式支持

在 UIKit 平台(iOS、iPadOS、visionOS、tvOS、watchOS、Mac Catalyst)上,走马灯支持动态 GIF、WebP、HEIC 或 APNG 文件,全部使用原生 UIImage。

注意

我们使用一个特殊的 UIImage 初始化器来提供支持,该初始化器使用原生 ImageIO 框架来读取这些格式,并将任何额外的元数据(例如循环计数和可变帧速率,如果适用)作为关联对象存储在 UIImage 实例本身上。 走马灯的图像视图还可以播放使用 UIKit 内置的 UIImage.animatedImage 方法创建的动态 UIImage 实例。

在 AppKit 平台(原生 macOS)上,走马灯依赖于 NSImage 对动态 GIF 文件的内置支持。

示例

Sources/Views/FrameAnimator.swiftSources/Views/AsyncAnimatedImage.swift 包含带有示例的 Xcode 预览。