排序
高级过渡
SwiftUI 的过渡系统允许我们自定义插入或移除视图的方式,可以在要过渡的视图周围插入一系列新视图、创建本地状态、添加复杂的动画等等。 本文创建的效果,如下所示 Twitter 点赞效果 添加新的...
Widget 的 Container Background
Widget 的 Container Background(容器背景) 是在 iOS 17 中引入的。在 Widget 的开发过程中,可能会在预览中遇到如下的错误 Widget needs to adopt container background. 容器背景用途 iOS 1...
Minesweeper
如果你想继续学习本教程,请使用 App template 创建一个新的 macOS 项目,并将其命名为 Minesweeper。 显示网格 我们的第一步将是显示一个包含棋盘整体布局的方格网格。这些方格中的所有内容都...
Kana Quest
这个 app 用来学习日语中的平假名(hiragana)与片假名(katakana)。 基本用户界面 这个项目的 assets.zip 压缩文件,包含两个重要的文件: kana.json 文件包含我们要使用的所有日语字符。 Bundle-...
布局(八) – 坐标空间
Framework 为我们提供两种内置的坐标空间: 全局坐标空间 和 本地坐标空间,我们也可以定义⾃⼰的坐标空间。struct ContentView: View { var body: some View { VStack { Text('Hello') Text('Se...
布局(七) – 基于首选项的布局
几何读取器使⽤⼏何读取器 (GeometryReader),我们可以测量被建议的尺⼨。⼏何读取器⽆条件接受被建议尺⼨,并通过⼀个⼏何代理 (GeometryProxy) 将该尺⼨报告给它的视图构建器闭包。通过⼏何代...
布局(六) – Layout 协议
Layout 协议,可以创建⾃定义的容器视图,让它们根据所编写的算法来布局⼦视图。这个协议的使用分为两步:⾸先,使⽤ sizeThatFits ⽅法确定容器的尺⼨。在该⽅法内部,我们通过⼦视图的代理,来...
动画(四) – 过渡
以视图的插⼊和移除来设定动画,SwiftUI 将这些动画称为 过渡 (transition) 。 当我们使⽤动画来改变那些会导致视图插⼊或者移除的状态时,SwiftUI 会添加⼀个默认的 .opacity 过渡效果。 struc...
动画(三) – 动画协议
SwiftUI 属性动画系统的核⼼是 Animatable 协议。这个协议可以被视图和视图修饰符所实现,它们通过该协议把可以进⾏动画的属性暴露给SwiftUI。 这个协议唯⼀的要求是⼀个 animatableData 属性,...
动画(二) – 控制动画
在 SwiftUI 中,有多种⽅式可以指定动画发⽣地时机 当某个特定的值改变时,触发隐式动画。 当某个特性事件发⽣时,触发显示动画。 动画类型 隐式动画 要指定隐式动画,可以在视图树的任意位置使...