用途:这是一份 SwiftUI 动画系统的综合参考,讲解从基础概念到进阶技巧的内容,帮助在实际实现动画、理解 VectorArithmetic、使用 @Animatable 宏、缩放转场以及 UIKit/AppKit 动画桥接时查阅。
核心原理:SwiftUI 动画是随时间进行的数学插值,由 VectorArithmetic 协议驱动。该协议要求可动画数据提供减法、缩放、加法与零值,使 SwiftUI 能在任意两个值之间插值。内置遵循类型包括 CGFloat、Double、Float、Angle(一维)、CGPoint、CGSize(二维)、CGRect(四维)。Int 不遵循该协议,因此会直接跳变,可用 Float/Double 并通过显示时转换解决。
主要能力:资料覆盖 Animatable 协议(animatableData、AnimatablePair 组合多维数据、自定义遵循)、iOS 26 的 @Animatable 宏(自动生成遵循、用 @AnimatableIgnored 排除属性)、动画类型(linear/easeIn/easeOut/easeInOut 等时间曲线,smooth/snappy/bouncy 及自定义 spring,delay、repeat、speed 等高阶修饰)、Transaction 系统(withAnimation、animation(_:value:)、iOS 17 作用域动画、自定义 TransactionKey)、CustomAnimation 协议与动画合并行为,以及 iOS 17 的 PhaseAnimator 等分阶段动画。
系统要求:iOS 13+ 支持 Animatable 与时间/弹簧动画;iOS 17+ 支持默认弹簧动画、作用域动画、PhaseAnimator、KeyframeAnimator;iOS 18+ 支持缩放转场与 UIKit/AppKit 桥接;iOS 26+ 支持 @Animatable 宏。
限制与注意:自定义 Animatable 遵循开销较大,SwiftUI 会在主线程上逐帧调用 body;内置效果(如 scaleEffect、opacity)在非主线程运行且不调用 body,仅在内置修饰符无法实现效果时才建议自定义。资料未提供安装命令或价格等信息。