50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

开启 UI 开发新篇章,SwiftUI 5 不再使用 Combine,扩展更多动画功能

  • 2023-07-21
    北京
  • 本文字数:1081 字

    阅读完需:约 4 分钟

开启UI开发新篇章,SwiftUI 5 不再使用Combine,扩展更多动画功能

在 WWDC 2023 中,苹果展示了其 UI 编程声明式框架的最新迭代。SwiftUI 5 使用全新的 Observation 框架取代 Combine,彻底改变了其反应式的基础。此外,这次迭代中还增加了对分阶段动画、 ScrollView 优化,新手势等等的支持。


全新 Observation 框架的采用带来了众多优势,其中包括语法的简化和语义的精简、跟踪选项和集合的可能性,以及对 State 和 Environment 用法的扩展以取代 StateObject 和 EnvironmentObjectObservation 框架还取消了使用 @Published 属性包装器注解所有可被观测的属性的要求,开发者可通过在类的层面上使用 @Observable 宏让该类的所有属性可被观测,如下面例子所示:


@Observable class Library {    var books: [Book] = [Book(), Book(), Book()]}
复制代码


对希望避免观测到特定属性的特殊情况而言,开发者可在该属性上使用 ObservationIgnored 宏。有意思的是,对所有使用 SwiftUI 和 Combine 构建应用的开发者而言,新框架的采用可逐步进行


Observation 框架无疑是一项重大创新,它将改变开发者构建 SwiftUI 代码的方式。SwiftUI 的最新迭代中同样包含对框架的渐进式改进,意在扩展其功能或追加开发者们习惯在 UIKit 中见到的功能。


对 ScrollView 中 scrollPosition 的追踪可能无疑是个颇受欢迎的小改进。在视图滚动到一个新位置时,scrollPosition 修改器将更新状态变量并将其识别为第一可见视图。反之,开发者也可赋值该状态变量以跳转到任意特定视图中。此外,开发者也可通过全新 ScrollTargetBehaviour 协议选择一个滚动行为。


随着对完成处理其的引入,SwiftUI 动画也得到了细微但却功能强大的扩展。这个不起眼的新功能让分段动画的定义成为可能,比如分阶段或分状态的(循环)动画。


开发者也可使用全新的 PhaseAnimator 视图迭代一系列的阶段,并为每一阶段定义特定动画,而不再需要直接通过完成处理器手动连接各个阶段才能构建分段动画。


SwiftUI 5 中也引入了两个新的手势,RotateGesture 和 MagnifyGesture,用于追踪视图的旋转和放大。RotateGesture 取代了原先的 RotationGesture,而 MagnifyGesture 则取代了原先的 MagnificationGesture。这两个新增的类提供了更为简化的语法,让视图的旋转和放大变换更易于应对。


这些新功能将于 iOS 17、iPadOS 17、macOS 17,以及苹果在明年秋季发布的其他操作系统中开始使用。关于 SwiftUI 中新功能的完整概述,可参见苹果于 WWDC 2023 的演示


原文链接

SwiftUI 5 Leaves Combine behind, Extends Animations, and More


相关阅读:

苹果推出 SwiftData,持久化框架的技术革新

Swift 5.8新特性预览:支持函数向后部署

2023-07-21 08:005034

评论

发布
暂无评论
发现更多内容

Qt | 实现自定义手机号输入框控件

YOLO.

qt 10月月更 C++

跟着卷卷龙一起学Camera--ISO

卷卷龙

ISP camera 10月月更

40道Promise输出题,你都会了吗?🔥

CoderBin

面试 前端 JavaScrip 10月月更

【C语言内功修炼】动态内存管理的奥秘

Albert Edison

C语言 malloc 动态内存 10月月更 free

Vue常用修饰符大全

CoderBin

面试 Vue 前端 10月月更

Python进阶(七)浅谈python3和Python2的区别

No Silver Bullet

Python3 区别 10月月更 Python2

MFC|CCombobox控件修改编辑框光标显示位置

中国好公民st

c c++ 10月月更

Python应用之基础结构-链表-合并两个有序链表

芯动大师

链表 10月月更 合并有序

斐波那契数

掘金安东尼

算法 10月月更

分布式定时任务设计及其框架

穿过生命散发芬芳

10月月更 分布式定时任务

10项任务助你落地架构课程!

华仔

架构实战营

Python应用之基础结构:链表- 删除排序链表中的重复元素

芯动大师

10月月更 链表结构 基本元素

业务流程巡检拨测常用的开源工具

阿泽🧸

10月月更 业务流程

【算法作业】实验二:给立方体排序的小明&&同时整除的数

清风莫追

数据结构 算法 10月月更

2022-10-08:以下go语言代码输出什么?A、0 0;B、0 4;C:4 0;D:4 4。 package main const s = “Go101.org“ // len(s) == 9

福大大架构师每日一题

golang 福大大 选择题

数据结构线性表链表

IC00

c 链表 数据结构算法 10月月更 链表结构

【Java深入学习】可见性

Geek_65222d

10月月更

【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序

清风莫追

数据结构 算法 10月月更

Python进阶(五)浅谈python匿名函数及编写无参数decorator

No Silver Bullet

Python 10月月更 匿名函数 无参数decorator

2022 年适用于 Linux 和 Windows 的五款最佳 Python 代码编辑器

wljslmz

Python ide 编辑器 10月月更

Photoshop软件应用项目(二)

张立梵

设计师 ps 10月月更

hashmap常见面试题

普罗米修斯

10月月更

【算法作业】实验三:划分集合-贪心 & 可能的IP地址-回溯

清风莫追

数据结构 算法 10月月更

IDEA的Docker插件实战(Dockerfile篇)

程序员欣宸

Docker IDEA 10月月更

LinkedList源码分析(二)

知识浅谈

linkedlist 10月月更

【Java深入学习】join再理解

Geek_65222d

10月月更

Python应用之基础结构:二叉树 前序遍历

芯动大师

二叉树 遍历 10月月更

AI大模型的白垩纪

脑极体

大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

Lansonli

10月月更 大数据ELK

C++ | 关于extern关键字的使用

YOLO.

qt 10月月更 C++

Spring Boot「01」构建 REST API

Samson

Java Spring Boot Web 学习笔记 10月月更

开启UI开发新篇章,SwiftUI 5 不再使用Combine,扩展更多动画功能_Android/iOS_Sergio De Simone_InfoQ精选文章