首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WWDC 23 之后 SwiftUI 有哪些新功能

前言 WWDC 23 已经到来,SwiftUI 框架中有很多改变和新增功能。本文中将主要介绍 SwiftUI 中数据流、动画、ScrollView、搜索、新手势等功能新变化。...之前 SwiftUI 框架版本中,应该使用 @ObservedObject 属性包装器来订阅更改。现在不需要了,因为 SwiftUI 视图会自动跟踪符合 Observable 协议类型更改。...动画 动画始终是 SwiftUI 框架中最重要部分。 SwiftUI 中轻松实现任何动画,但之前框架版本缺少一些现在具有的功能。...框架引入了新 PhaseAnimator 视图,它遍历阶段序列,允许为每个阶段提供不同动画,并在阶段更改时更新内容。...,允许调整列表间距。

32820

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新滞后会导致不可接受后果。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死这是一个 SwiftUI 所有版本中存在错误,你可以众多论坛或聊天室里看到不少开发者都在寻找解决方法。...它复现条件如下:iOS 16 系统,真机或模拟器上测试点击视图列表按钮,可以进入下一级视图。...由于返回上层视图时,状态尚未更新,因此清理 AG 时(返回动画运行中),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

606110
您找到你想要的搜索结果了吗?
是的
没有找到

Ask Apple 2022 与 SwiftUI 有关问答(下)

SwiftUI 4.0 Form Ventura 上表现与以往版本有很大不同。形式上接近 iOS 状态,同时也对 mac 进行了更多适配。...自定义布局Q:我经常想根据列表中最长或最短文字来布置各种小组件。鉴于动态文本大小应用程序运行时可能会发生变化,衡量给定字体文本大小最佳方法是什么?A:你好!我们新布局协议支持这个功能。...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...这意味着我们不能使用 LazyVStack,或任何其他将选择与详细视图绑定自定义视图。有扩展这个功能计划吗?A: iOS 16.1 中,你可以侧边栏里放一个。...连锁动画Q: SwiftUI 中,如何实现连锁动画?例如,我想先给一个视图做动画,当动画完成后立即启动另一个动画。A:不幸是,目前不可能实现连锁动画

14.7K30

SwiftUI WWDC作为开发者我最激动部分

为什么会使我那么惊喜? 我们都知道前端工作离不开适配,虽然之前Apple Xib一些设计适配起来很方便了。但是pad或者tv上还是要写不同代码去做在不同平台运行。...用户喜欢苹果生态系统所有方面,比如控件和特定于平台体验,都可以代码中很好地表现出来。SwiftUI是真正本地应用程序, ?...SwiftUI语法是什么样呢 ---- SwiftUI使用声明性语法,因此您可以简单地声明用户界面应该做什么。例如,您可以编写一个包含文本字段列表,然后描述每个字段对齐方式、字体和颜色。...您代码比以往任何时候都简单、更易于阅读,从而节省了您时间和维护。 ? 这种声明式风格甚至适用于复杂概念,如动画。轻松添加动画到几乎任何控件,并选择一个集合准备使用效果只有几行代码。...在运行时,系统会处理创建平滑移动所需所有步骤,甚至会处理中断以保持应用程序稳定。有了这个简单动画,你将寻找新方法使你应用程序活起来。

2.3K30

解析 SwiftUI 中两处由状态更新滞后引发严重 Bug

而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了先调整状态,后更新视图操作。...如果仅从上述两个例子考虑,无论状态调整是否及时,都不会出现什么错误结果。但是,当应用程序处于某些特殊状态或用户进行某些特定操作时,状态更新滞后会导致不可接受后果。...通过手势取消 Sheet 后,快速右滑导航容器会导致应用锁死 这是一个 SwiftUI 所有版本中存在错误,你可以众多论坛或聊天室里看到不少开发者都在寻找解决方法。...它复现条件如下: iOS 16 系统,真机或模拟器上测试 点击视图列表按钮,可以进入下一级视图。...由于返回上层视图时,状态尚未更新,因此清理 AG 时(返回动画运行中),会破坏应用程序 AttributeGraph 完整性,从而导致应用程序死锁或崩溃。

28520

Ask Apple 2022 与 SwiftUI 有关问答(上)

是否有任何建议用来检测列表行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...model.state 任何变动都将引起动画。通过使用与某个特定状态绑定 animation 修饰器( 老版本 animation 修饰器已被软弃用 ),可以实现更加精确动画效果。...是否关于如何使用多个场景指导或例子?或者大多数应用程序只需要一个 WindowGroup ?A:多场景对于建立复杂应用程序是很有用,特别是 macOS 上。...A:目前最好方法是建立一个导航状态模型对象,它持有导航状态规范表示,它可以为你正常和紧凑显示提供专门程序绑定。...每周也会对当周博客上新文章以及 Twitter 上发布 Tips 进行汇总,并通过邮件列表形式发送给订阅者。订阅下方 邮件列表[25],可以及时获得每周 Tips 汇总。

12.2K20

苹果全新UI框架来了!可视化编程,自动化减少20%代码量

来源:Github等 编辑:鹏飞 本文转自公众号:新智元 【导读】SwiftUI是为Apple平台创建用户界面的现代化框架,以前所未有的速度创建漂亮、动态应用程序。...SwiftUI是一个非常方便快速构建UI框架,与最新Xcode设计工具无缝协作,可为所有苹果设备构建UI。开发者通过SwiftUI,利用Swift语法就能够完成代码和设计同步。...而SwiftUI通过4种方式,解决了上述问题: 用一个新声明式UI结构,定义了布局外观和工作方式 更新UI预览会自动生成新Swift代码,反之,更改Swift代码也会更新UI预览 Swift中任何绑定例如有效...此前,无论什么尺寸屏幕iPad,总是很难将Interface Builder大小放到iOS上。而拥有简单,更快速安全SwiftUI为开发人员实现真正平台独立性迈出了一大步。...创建列表和导航栏: ? 处理用户输入: ? Drawing and Animation 绘图路径和形状: ? 动画视图和过渡 ? App Design and Layout 复杂界面组合: ?

5.3K20

SwiftU:将状态绑定到UI控件

SwiftUI@State属性包装器允许我们自由修改视图结构体,这意味着当程序更改时,我们可以更新视图属性以匹配。 但是,使用UI控件时,事情会复杂一些。...但是,该代码不会编译,因为SwiftUI想知道文本字段中文本存储位置。 请记住,视图是其状态函数——文本输入框只能在反映存储程序中值时显示某些内容。...SwiftUI需要是结构中一个字符串属性,它可以显示文本输入框中,还将存储用户文本输入框中键入任何内容。...问题是Swift区分了“在此处显示此属性值”和“在此处显示此属性值,但将任何更改写回该属性” Swift中,我们用一个特殊符号来标记这些双向绑定,这样它们就很显眼:我们它们前面写一个美元符号$...继续之前,让我们修改文本视图,使其文本字段正下方显示用户名: Text("Your name is \(name)") 注意它是如何使用name而不是$name?

2.9K10

SwiftUI 之 HStack 和 VStack 切换

举个例子,假如我们正在构建一个 app 其中包含 LoginActionsView ,一个让用户登录时列表中选择操作类: struct LoginActionsView: View { .....这样做好处不仅仅是引入 GeometeryReader 之前保留同样紧凑布局,并且会使 DynamicStack 开始时候以一种和系统组件类似的方式在所有设备和方向上构建。...关键路径),将会使我们视图内容中切换到当前 sizeClass 值: struct DynamicStack: View { ......Xcode 14 一部分仍在测试阶段) 其中一个工具是新 Layout 协议,它既能让我们创建完整自定义布局,直接集成到 SwiftUI 布局系统中,同时也提供给我们一种丝滑更动画方式各种布局之间动态切换...这样做会令动画流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅性能提升(因为 SwiftUI 总是在其视图层次结构为静态时尽可能表现最佳) 选择合适视图 但我们还没有结束,因为

2.8K10

Ask Apple 2022 中与 Core Data 有关问答 (下)

主程序与扩展程序数据同步Q:我有一个主应用程序和一个扩展程序,它们都读取相同 Core Data 数据库。但是,当我应用程序中进行更改时,我扩展程序重新启动之前不会看到更改。...A:初始数据获取完成后,@FetchRequest 成本与结果变化多少有关,而手动重新获取成本与结果总数有关。...应用程序中一次性加载 CoreData 数据并将其保存在局部变量中使用多个 FetchRequests我目前 SwiftUI 中使用 UICalendarView 并从 CoreData 中获取数据...私有上下文Q:如何配置 Core Data Stack,以便在后台保存更改时,用户可以继续使用应用程序。...筛选关系数据Q:我发现在 SwiftUI 中使用 @FetchRequest 是将用户界面与 Core Data 数据绑定很好手段。然而,使用关系来获得同样无缝绑定时,我碰到了一个小问题。

3.2K20

SwiftUI属性包装器如何处理结构体

已经了解了 SwiftUI 如何通过使用 @State 属性包装器将变化数据存储结构体中,如何使用 $ 将状态绑定到UI控件值,以及更改 @state 包装属性时是如何自动让 SwiftUI 重新调用我们结构体...Xcode 有一个非常有用命令,称为“快速打开”(使用 Cmd + Shift + O 进行访问),该命令使您可以项目或已导入任何框架中找到任何文件或类型。...现在将其激活,然后输入 "State"——希望第一个结果在其下方显示 SwiftUI,但如果没有,请找到并选择它。...在后台,它将值发送给SwiftUI以便存储可以自由修改位置,因此,结构体本身永不改变。...但是,由于 @State 实际上会包装其内容,因此实际上是说,当包装 blurAmount State 结构体更改时,请打印出新模糊量。 还在这儿?

1.7K10

SwiftUI Overlay Container 2 —— 可定制、高效、便捷视图管理器

仅需简单配置,SwiftUI Overlay Container 即可帮你完成从视图组织、队列处理、转场、动画、交互到显示样式配置等基础工作,让开发者可以将精力更多地投入到应用程序视图实现本身。...因此,我写了一个组件希望可以帮助开发者 SwiftUI快速完成上述需求。但受限于当时技术能力,很多想法都没有能够很好地实现。... SwiftUI 中,描述视图已经变得十分容易,因此我们完全可以将上述场景中显示逻辑提炼出来,创建出一个可以覆盖更多使用场景库,帮助开发者组织视图显示风格和交互逻辑。...快速使用指南 详细信息,可以参看库中演示以及源代码中注释。...至少需要为容器设定:名称、视图显示类型、视图队列类型。 可以为容器设定默认视图风格,对于视图未指定风格属性,会使用容器默认设置替代。

2.1K20

Ask Apple 2022 中与 Core Data 有关问答

SwiftUI 中,我们通常会使用 environment 为视图树注入视图上下文,一旦 loadPersistentStores 出现错误导致 container 无法正常创建,那么调用上下文注入将会失败...您可以根据需要将通知侦听器绑定到事件以更新和显示状态。无法主动触发同步。...SwiftUI 下如何使用 FetchedResultsControllerQ:是否有 SwiftUI 应用程序中使用 Core Data 任何实践或建议?... App Group 中如何立即反应变化Q:当通过应用程序扩展(例如,SiriKit/AppIntents )向存储提交更改时,保证更改立即反映在可能已经运行应用程序最佳方式是什么( 反之亦然...用例是:当我打开 Focus 过滤器时,我将 @AppStorage 值更改为用户希望应用程序中看到标签列表

2.8K20

架构之路 (五) —— VIPER架构模式(一)

开始 首先看下主要内容: 本教程中,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行iOS应用程序,来自翻译。...VIPER架构模式是MVC或MVVM另一种选择。虽然SwiftUI和Combine框架创建了一个强大组合,可以快速构建复杂ui和在应用程序中移动数据,但它们也面临着各自挑战和对架构看法。...这样就容易进行测试、维护和扩展。 本教程中,您将使用VIPER体系结构模式构建一个应用程序。这款应用也被方便地称为VIPER。 它将允许用户通过向一条路线添加路径点来构建公路旅行。...路由器Router处理屏幕之间导航。这与SwiftUI不同,SwiftUI中,视图显示任何新视图。...本例中,主要entity是Trip,它包含一个路点Waypoints列表,路点是旅程中各个站点。 这个应用程序包含一个DataModel类,它包含一个旅行列表

17.4K10

SwiftUI 布局协议 - Part2

当我们改变角度时,SwiftUI 会计算好每个视图最初和最终位置,然后动画期间内修改它们位置,从A点到B点成一条直线。...简单说,通过添加 animatableData 属性到我们布局,我们要求 SwiftUI 动画每一帧重新计算布局。但是,每个布局传递中,角度都会收到一个内插值。...= nil } 注意:我称它为双向自定义值,因为信息是可以双向流动,但是,这不是 SwiftUI 官方术语,只是为了清晰解释这个想法术语。...另外两个旋转指向中心,但是一个不使用动画而另一个使用。 避免布局循环和崩溃 众所周知我们布局期间不能更新视图状态。这会导致不可预测结果,很可能会使 CPU 达到峰值。...如果 CPU 开始飙升,或许可以 placeSubviews 中添加一条打印语句查看它是否无休止调用。注意动画会使 CPU 增长。如果你想测试你容器是否循环,不要在动画时查看 CPU 。

2.7K30

苹果推出突破性新技术,使开发人员更加轻松快捷地创建应用

主要包括以下几项技术: SwiftUI是一个革命性开发框架,它使构建强大用户界面比以前容易。...SwiftUI Swift愿景一直是使开发更快,容易和更具交互性,现代UI框架是该愿景重要组成部分。 SwiftUI提供了一个非常强大和直观新用户界面框架,用于构建复杂应用程序UI。...Xcode 11为SwiftUI带来生机 Xcode 11中内置新图形UI设计工具使UI设计人员可以轻松地使用SwiftUI快速组装用户界面,而无需编写任何代码。...Swift代码自动生成,当修改此代码后,对UI更改会立即显示可视化设计工具中。 现在,开发人员可以看到UI组装,测试和优化代码时外观和行为自动实时预览。...增强现实体验 ARKit 3将人置于AR中心。 借助动作捕捉,开发人员可以将人们动作集成到他们应用程序中,通过人物遮挡,AR内容将自然地显示人们面前或后面,以实现更加身临其境AR体验。

2.1K20

【visionOS】从零开始创建第一个visionOS程序

另外,如果你有一个现有的iPad或iPhone,将visionOS添加到应用程序中,可以感受到更好贴近现实外观与体验,并添加特定于平台功能,以创建引人注目的体验。...你也可以用它来为你内容构建和测试自定义RealityKit动画和行为。 修改现有的窗口页面链接 使用标准SwiftUI视图构建初始接口。...带有立体显示设备可以让人们以一种感觉真实方式体验3D内容。内容似乎具有真正深度,人们可以从不同角度观看它,使它看起来就在他们面前。...在为visionOS构建应用程序时,请考虑如何为应用程序界面添加深度。该系统提供了几种显示3D内容方法,包括现有窗口中,卷中以及沉浸式空间中。选择最适合你应用和你提供内容选项。...在你应用中已经有模型数据地方使用它,或者可以从网络上下载它。例如,购物应用程序可能会使用这种类型视图来显示产品3D版本。

74040

肘子 Swift 周报 #005

投影将隐藏 COM 详细信息,并为给定语言提供自然编程体验。...Advanced SwiftUI Animations – Part 7: PhaseAnimator[15] Javier[16] WWDC 2023 中,SwiftUI 动画功能得到了显著增强...在这篇文章中,Javier 对阶段动画使用方法进行了详尽介绍,他还指出了阶段动画中使用 Text 视图可能出现一个潜在问题,并提供了解决方案。...Creating Shortcuts with App Intents[19] Mark Struzinski[20] 快捷方式允许用户不启动和导航到特定屏幕以执行任务情况下与你应用程序进行交互。... iOS 16 中,Apple 改进了向 iOS 添加和暴露应用程序快捷方式过程。新 App Intents 框架允许开发者使用你日常使用相同语言(Swift)创建快捷方式!

23150

面向所有人 UI 编程 :透过点按弹窗初尝 SwiftUI

更新 iOS 13 或者 iPadOS 13 后,你会发现长按许多软件图标都会出现如下弹窗,比如设置内快捷选项允许你快速更改电池设置等等。...事实上,苹果在今年 WWDC 19 开发者大会中,推荐开发者将应用内弹窗安置应用程序方方面面,以保证 iOS 用户体验一致性。 ?...在手机应用中,软件开发者会使用不同技术来实现界面的显示,流行界面语言比如 Flutter,就是闲鱼应用交互界面语言。...其中 View 表示一个视图,比如我们在手机上看到一个滑条,一张图片,一个列表等种种,都叫做视图;而 Modifier 则是修饰器,它作用是为视图增加功能,比如圆角,动画,阴影,边际,背景等等。...若你想仔细学习 SwiftUI 和苹果或安卓应用程序开发,欢迎文末写下你想学习内容,我会参考写文。

2.1K40
领券