Skip to content

在使用 SwiftUI 时,您可以单独对视图或视图的状态进行动画处理,无论效果出现在何处。SwiftUI 会为您处理所有这些组合、重叠和可中断动画的复杂性。

在本教程中,您将对包含跟踪用户使用 Landmarks 应用程序时所进行的远足的图表的视图进行动画处理。使用 animation(_😃 标记,您将看到对视图进行动画处理是多么简单。

下载启动项目并跟随本教程一起操作,或者打开完成的项目并自行探索代码。

第 1 节

将徒步数据添加到应用 在可以添加动画之前,您需要一些可以动画化的对象。在本节中,您将导入并建模徒步数据,然后添加一些预构建的视图,用于在图表中静态显示这些数据。

步骤 1

将下载文件中的 Resources 文件夹中的 hikeData.json 文件拖动到项目中的 Resources 组。在点击完成前,请确保选择了“如果需要则复制项目项”。

第 2 步

在项目中的 Model 组使用菜单项 File > New > File 创建一个新的 Swift 文件,命名为 Hike.swift 。

和 Landmark 结构一样, Hike 结构遵循 Codable ,并且具有与相应数据文件中的键匹配的属性。

第 3 步

将 hikes 数组加载到模型中。

第 4 步

将下载文件中的 Resources 文件夹中的 Hikes 文件夹拖到项目中的 Views 组。确保在点击完成前选择“如果需要复制项目”和“创建组”。

了解新的视图。它们协同工作以显示加载到模型中的徒步数据。

第 5 步

在 HikeView 中,尝试显示和隐藏图表。

请务必在整个教程中使用实时预览,以便您可以尝试每个步骤的结果。

第 2 节

为单独的视图添加动画 当你在可比视图上使用 animation(😃 修饰符时,SwiftUI 会动画化视图的可动画化属性的任何变化。视图的颜色、透明度、旋转、大小和其他属性都是可动画化的。当视图不是可比视图时,你可以使用 animation(:value:) 修饰符在指定值变化时开始动画。

步骤 1

在 HikeView 中,通过添加一个在 showDetail 值变化时开始的动画修饰符,为按钮的旋转开启动画。

第 2 步

通过使图表可见时按钮变大来添加另一个可动画化的更改。

动画修饰符应用于其包裹的所有可动画化更改。

第 3 步

将动画类型从 easeInOut 更改为 spring() 。

SwiftUI 包括基本动画,这些动画预定义了或自定义了缓动效果,还包括弹簧动画和流体动画。您可以调整动画的速度,在动画开始前设置延迟,或指定动画重复。

第 4 步

尝试在 scaleEffect 修饰符上方添加另一个动画修饰符以关闭旋转的动画效果。

实验

试一试 SwiftUI。尝试结合不同的动画效果来看看有哪些可能性。

第 5 步

在继续下一节之前,请先移除两个动画修饰符。

第三部分

动态显示状态变化的效果 现在你已经学会了如何将动画应用到单独的视图上,是时候在你改变状态值的地方添加动画了。

在这里,你将为用户点击按钮并切换 showDetail 状态属性时发生的所有变化应用动画。

步骤 1

使用 withAnimation 函数将对 showDetail.toggle() 的调用包裹起来。

受 showDetail 属性影响的两个视图——披露按钮和 HikeDetail 视图——现在都有动画过渡。

减慢动画速度,看看 SwiftUI 动画是否可中断。

第 2 步

将四秒长的 basic 动画传递给 withAnimation 函数。

您可以将与 withAnimation 修改器相同的动画类型传递给 animation(_:value:) 函数。

第 3 步

在动画过程中尝试打开和关闭图表视图。

第 4 步

在继续下一节之前,恢复 withAnimation 函数以使用默认动画,通过删除调用的输入参数来实现。

第 4 节

自定义视图过渡 默认情况下,视图通过淡入淡出在屏幕上和屏幕外过渡。您可以使用 transition(_😃 修改器来自定义此过渡。

步骤 1

向有条件显示的 HikeView 添加一个 transition(_😃 修改器。

现在通过滑动显示和消失来使图表出现和消失。

第 2 步

将您刚刚添加的过渡提取为 AnyTransition 的静态属性,并在视图的过渡修饰符中访问新属性。

这会随着自定义过渡的扩展保持你的代码整洁。

第 3 步

切换使用 move(edge:) 过渡,这样图表将从同一侧滑入和滑出。

第 4 步

使用 asymmetric(insertion:removal:) 修改器为视图出现和消失时提供不同的过渡效果。

第 5 节

组合动画以实现复杂效果 当您点击下方条形图下的按钮时,图表会在三种不同数据集之间切换。在本节中,您将使用组合动画来使构成图表的胶囊产生动态的波纹过渡。

步骤 1

在 HikeView 中,将 showDetail 的默认值更改为 true ,并固定预览到画布上。

这样你就可以在编辑另一个文件中的动画时查看图表的上下文图形。

第 2 步

在 HikeGraph 中,定义一个新的 ripple 动画并将其应用于每个生成的图表胶囊。

第 3 步

将动画切换为弹簧动画,并减少阻尼系数使条形图跳动。

你可以通过在实时预览中切换海拔、心率和配速来查看动画效果。

第 4 步

将动画速度加快一点,以缩短每个条形移动到新位置所需的时间。

第 5 步

根据胶囊在图表中的位置,在每个动画中添加一个延迟。

第 6 步

观察自定义动画在在图表之间过渡时提供的波纹效果。

在继续下一个教程之前,请确保取消预览。