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

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

历史 2020 年夏天,在为 健康笔记[2] 添加侧向滑动菜单过程,我发现在开发中经常会碰到需要在一个视图上方动态添加另一视图场景,例如(提示信息、广告、浮动按钮、新手指南等等)。...因此,我写了一个组件希望可以帮助开发者在 SwiftUI 快速完成上述需求。但受限于当时技术能力,很多想法都没有能够很好地实现。...在 SwiftUI ,描述视图已经变得十分容易,因此我们完全可以将上述场景显示逻辑提炼出来,创建出一个可以覆盖更多使用场景库,帮助开发者组织视图显示风格和交互逻辑。...当给定视图数量超过了容器设定最大视图数量时,超过视图会暂存在等待队列,并在已显示视图取消后,逐个递补。 multiple oneByOne 同一时间只能在容器显示一个视图。...部分版本操作系统(iOS 14,watchOS )不支持 blur 模式,如果想在这些版本中使用 blur,可以通过 customView 来包裹其他 blur 代码。

2.1K20

我庆幸果断放弃了SwiftUI:它还不够成熟

并且 SwiftUI 可以“实现一次编码,可适应五端 Apple 产品平台”, 包括watchOS、tvOS、macOS 等,以此统一苹果平台 UI 框架。...但每当 SwiftUI 更新检查器视图时(这种更新可能出现在移动过程,甚至是在输入文本字段时候),渲染速率都会下降到每秒 10 到 15 帧,而且相当不稳定。这显然让人无法容忍。...利用这款工具,我可以用多个 sprite 拼接成复杂资产,再最终为它们制作动画。它显示效果就是主窗口中一张,出于学习目的,我当然还是想继续用 SwiftUI 喽。...但上图展示效果其实是在 AppKit 完成,因为我在 SwiftUI 一直实现不了预期功能。大家应该注意到了,中间 SpriteKit 视图上有三个按钮(分别是 +、200% 和 -)。...这些按钮只跟管理 SpriteKit 视图缩放 @State 相关联。尽管几乎不涉及任何其他数据,在界面更新前单击这些按钮,也会产生将近一秒钟巨大延迟。

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

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

快速检索数组元素Q:为什么没有简单方法将 TABLE 选择行映射到提供内容数组元素上?似乎唯一方法是在数组搜索匹配 id 值,这对于大来说似乎效率很低。...开发者即使无法实现这样布局容器,也应对各种尺寸需求定义有清晰理解。在 SwiftUI 布局 —— 尺寸( 上 )[8] 一文,对建议尺寸几种模式都进行了介绍。...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...将背景扩展到安全区域Q:如果我有一个自定义容器类型,可以接受一个顶部和底部视图,是否有办法让 API 调用者将所提供视图背景扩展到安全区域内,同时将内容( 文本按钮 )保留在安全区域内?...macOS APIQ:对于运行 Monterey Mac,能否如何在 SwiftUI 实现下面需求建议:打开一个窗口在该窗口中初始化数据找到所有打开窗口确定一个窗口是否打开从不在该窗口图中关闭一个窗口

14.7K30

SwiftUI:使用 @EnvironmentObject 从环境读取自定义值

SwiftUI环境使我们可以使用来自外部值,这对于读取Core Data上下文或视图展示模式等很有用。...这意味着,如果视图A是导航视图,则所有压入导航堆栈视图都可以访问同一环境。但是,如果视图A以工作(sheet)形式显示视图B,则它们不会自动共享环境数据,因此我们需要手动发送。...在向您展示一些代码之前,还有最后一件事:环境对象使用您已经学过ObservableObject协议,SwiftUI将自动确保共享同一环境对象所有视图在更改时都会更新。...——您现在就可以运行该应用并更改文本字段,以查看其值显示在下面的文本图中。...现在,您可能想知道SwiftUI何在.environmentObject(user)和@EnvironmentObject var user: User之间建立连接——如何知道将该对象放入正确属性?

9.5K20

干货 | 关于SwiftUI,看这一篇就够了

一、背景 苹果于2019年度WWDC全球开发者大会上,发布了基于Swift建立声明式框架--SwiftUI,其可以用于watchOS、tvOS、macOS等苹果旗下产品应用开发,统一了苹果平台UI...,该模式与Flux和Redux架构数据模式相类似。...在组合视图中,闭包中会处理大量UI组件,FunctionBuilder是通过闭包建立样式,将闭包UI描述传递给专门构造器,提供了类似DSL开发模式。...通过简单几行代码,设置了按钮点击事件,样式和文案。...通过该结构发现,与UIKit布局结构有很大不同,像按钮一些属性background、padding、cornerRadius等不应该出现在视图主结构,应该出现在Button视图结构

5.8K10

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

开始 首先看下主要内容: 在本教程,您将了解如何在SwiftUI和Combine中使用VIPER体系结构模式,同时构建一个允许用户创建公路旅行iOS应用程序,来自翻译。...VIPER架构模式是MVC或MVVM另一种选择。虽然SwiftUI和Combine框架创建了一个强大组合,可以快速构建复杂ui和在应用程序中移动数据,但它们也面临着各自挑战和对架构看法。...当将用户操作发送回数据模型时,VIPER模式甚至更有用。 为此,您将添加一个按钮来创建一个新旅程。...当您将其放置在NavigationView时,该链接将成为一个按钮,将destination推送到导航堆栈上。 content块可以是任何一个SwiftUI视图。...导航栏修饰符使用presenter发布tripName来定义标题,因此当用户键入时,它就会更新,而保存按钮则会保存任何更改。 构建并运行,现在,您可以编辑trip标题。

17.4K10

酷我音乐iOS小组件适配开发实践

更新数据以供swiftUI视图展示和交互使用),这种数据驱动视图符合swiftUI声明式编程范式(跟我们用OOP面向对象有较大差距) 这篇文章不能算教程,只能是算开发遇到过程记录,如果需要查看开发教程的话我建议去...容器适配问题, 如下图: 这是因为AppleiOS17做了跟多和桌面小组件优化,iOS17开始苹果统一了自家平台包括iOS、iPadOS、macOS、WatchOS、TVOS,苹果想让这个东西被系统模式着色...(我们不推荐这样实现,因为这样做可能一个组件只能适配iOS,却不能适配其它 例如watchOS、等系统,就造成兼容性下降等问题.) 2.SwiftUI中支持Button 在widget无法正常使用...Intentperfrom()函数.开发者可以在这处理点击按钮操作逻辑....小结 开发双行歌词时候,一开始是比较痛苦,主要是自己对swiftUI动画积累是不够,所以做起来比较慢.当熟悉了之后渐渐地轻车熟路. 7.刷新频限问题 iOS小组件是不允许我们频繁实时刷新,它有频率限制

54310

酷我音乐iOS小组件适配开发实践

更新数据以供swiftUI视图展示和交互使用),这种数据驱动视图符合swiftUI声明式编程范式(跟我们用OOP面向对象有较大差距) 这篇文章不能算教程,只能是算开发遇到过程记录,如果需要查看开发教程的话我建议去...容器适配问题, 如下图: 这是因为AppleiOS17做了跟多和桌面小组件优化,iOS17开始苹果统一了自家平台包括iOS、iPadOS、macOS、WatchOS、TVOS,苹果想让这个东西被系统模式着色...(我们不推荐这样实现,因为这样做可能一个组件只能适配iOS,却不能适配其它 例如watchOS、等系统,就造成兼容性下降等问题.) 2.SwiftUI中支持Button 在widget无法正常使用...Intentperfrom()函数.开发者可以在这处理点击按钮操作逻辑....小结 开发双行歌词时候,一开始是比较痛苦,主要是自己对swiftUI动画积累是不够,所以做起来比较慢.当熟悉了之后渐渐地轻车熟路. 7.刷新频限问题 iOS小组件是不允许我们频繁实时刷新,它有频率限制

82830

SwiftUI图中打开 URL 若干方法

访问我博客 www.fatbobman.com[1] 可以获得更好阅读体验 本文将介绍在 SwiftUI图中打开 URL 若干种方式,其他内容还包括如何自动识别文本内容并为其转换为可点击链接...image-20220520182722773 SwiftUI 1.0( iOS 13、Catalina ) 在视图中,开发者通常需要处理两种不同打开 URL 情况: 点击一个按钮( 或类似的部件...)打开指定 URL 将文本部分内容变成可点击区域,点击后打开指定 URL 遗憾是,1.0 时代 SwiftUI 还相当稚嫩,没有提供任何原生方法来应对上述两种场景。...3.0 时代,随着 Text 功能增强和 AttributedString 出现,SwiftUI 终于补上了另一个短板 —— 将文本部分内容变成可点击区域,点击后打开指定 URL。...NSDataDetector[5] 是 NSRegularExpression 子类,它可以检测自然语言文本半结构化信息,日期、地址、链接、电话号码、交通信息等内容,它被广泛应用于苹果提供各种系统应用

7.6K31

掌握 SwiftUI task 修饰器

Swift 采用是协作式任务取消机制,也就是说,SwiftUI 是无法直接停止掉我们通过 task 修饰器创建异步任务。...当满足了需要停止由 task 修饰器创建异步任务条件时,SwiftUI 会给该任务发送任务取消信号,任务必须自行响应该信号并停止作业。...在以下两种情况下,SwiftUI 会给由 task 创建异步任务发送任务取消信号:视图( task 修饰器绑定视图 )满足 onDisappear 触发条件时绑定值发生变化时( 采用 task 观察值变化时...task 修饰器在视图中创建异步任务,除了方便使用基于 async/await 语法 API 外,开发者也希望能够让这些任务运行在后台线程,以减少主线程负担。...SwiftUI 对 @State 做了特别的处理,我们可以在任意线程对其进行安全修改。

2.2K30

掌握 SwiftUI task 修饰器

随着 Swift 5.5 引入了 async/await 特性,苹果也为 SwiftUI 添加了 task 视图修饰器,以方便开发者在视图中使用基于 async/await 异步代码。...图片 我们本意是通过按钮来开启和关闭计时器显示以控制任务生命周期( 关闭时结束任务 ),但在点击 Hide Timer 按钮后,app 出现了无法响应且控制台仍在持续输出( 不按照原定间隔时间...Swift 采用是协作式任务取消机制,也就是说,SwiftUI 是无法直接停止掉我们通过 task 修饰器创建异步任务。...当满足了需要停止由 task 修饰器创建异步任务条件时,SwiftUI 会给该任务发送任务取消信号,任务必须自行响应该信号并停止作业。...使用 task 修饰器在视图中创建异步任务,除了方便使用基于 async/await 语法 API 外,开发者也希望能够让这些任务运行在后台线程,以减少主线程负担。

3.5K60

提高效率 |ArcGIS Pro 中所有快捷键一网打尽

Ctrl+Tab 或 Alt+F7。将出现一个窗口,其中显示了工程活动窗格和视图。使用方向键可移至要激活视图或窗格。按 Enter 键。 更改活动视图或窗格。 Ctrl+F6 更改活动视图。...O 随沿要素选项 在“随沿要素”模式下,更改文本对齐、放置约束和其他注记选项设置。 移动 用于“移动”工具键盘快捷键 键盘快捷键 操作 注释 Ctrl + 单击 重新定位锚点。...在按住 Shift 键同时切换方向键将取消选择行。 Shift+上箭头 添加上一折点。 将上一折点添加到选择并使其在地图中闪烁。在按住 Shift 键同时切换方向键将取消选择行。...Alt + 单击内容窗格图层 缩放至图层范围。 Z 持续缩放。 按住 Z 键同时拖动鼠标按钮,以将活动工具更改为连续放大或缩小模式。 X + 单击 逐步缩小。 单击以从数据逐步缩小。...Alt + 单击内容窗格图层缩放至图层范围。 Z持续缩放。按住 Z 键同时拖动鼠标按钮,以将活动工具更改为连续放大或缩小模式。X + 单击逐步缩小。单击以从数据逐步缩小。V + 拖动围绕一点旋转。

70420

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

在单元测试,很难对 SwiftUI图中依赖( 符合 DynamicProperty 协议 )进行测试。这也是 Redux-like 框架优势之一( 将状态从视图中抽离出来,方便测试 )。...阅读 SwiftUI 动画机制[8] 一文,了解更多有关动画内容。自适应高度 SheetQ:如何在 iOS16 呈现与动态内容高度相匹配 Sheet?...在 SwiftUI 4 ,紧凑和常规分别对应着 NavigationStack 和 NavigationSplitView 两种不同控件。两者有着完全不同驱动模式。...开发者目前仍在尝试创建一个可优雅地同时为两种模式提供路径模型。阅读 SwiftUI 4.0 全新导航系统[13] ,了解它们之间不同。...但是从一个文本字段到下一个文本字段聚焦感觉不够流畅,而且每当我在一个文本字段输入一个字母时,我 CPU 使用率似乎会飙升到 70% — 100%。

12.2K20

SheetKit——SwiftUI模态视图扩展库

主要因为SwiftUI重要视图展示模式:NavigationView、Sheet等都没有迅捷、简便重置能力。很难通过一两句代码将应用程序立即设置成我们想要视图状态。...请参阅我之前文章——在SwiftUI,根据需求弹出不同Sheet[3]。•新半高模态视图在WWDC 2021,苹果为大家带来了期待已久半高模态视图。...interactiveDismissDisabled SwiftUI 3.0interactiveDismissDisabled加强版,在通过代码控制是否允许手势取消基础上,增加了当用户使用手势取消时可以获得通知能力...更多信息请参阅如何在SwiftUI实现interactiveDismissDisabled[5] SheetKitinteractiveDismissDisabled为了兼容bottomSheet.../posts/swiftui-multiSheet/ [4] 源地址: https://github.com/fatbobman/SheetKit.git [5] 如何在SwiftUI实现interactiveDismissDisabled

2.9K20

何在SwiftUI实现interactiveDismissDisabled

何在SwiftUI实现interactiveDismissDisabled 想获得更好阅读体验,可以访问我博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...去年9月,我在文章【在SwiftUI制作可以控制取消手势Sheet】[3]中介绍了健康笔记2.0[4]版本Sheet控制实现方法。...在今年推出SwiftUI 3.0版本,苹果添加了一个新View扩展:interactiveDismissDisabled,该扩展实现了上面的第一个要求——通过代码控制是否允许手势取消Sheet。...尽管interactiveDismissDisabled实现很优雅,但仍未完成健康笔记[7]需要第二个功能:在用户使用手势取消Sheet时可以获得通知,进而拥有更多控制能力。...在之前版本[8],用户使用手势取消通知和其他逻辑是分离,在使用不仅繁琐,而且影响代码观感。本次将一并解决这个问题。

3.8K40

SwiftUI中使用UIKit视图

SwiftUI中使用UIKit视图 想获得更好阅读体验可以访问我博客www.fatbobman.com,或点击下方阅读原文 已迈入第三个年头SwiftUI相较诞生初始已经提供了更多原生功能...本文将通过对UITextField包装来讲解以下几点: •如何在SwiftUI中使用UIKit视图•如何让你UIKit包装视图具有SwiftUI风格•在SwiftUI使用UIKit视图需要注意地方...•处理UIKit视图中复杂逻辑在UIKit开发,通常会将业务逻辑放置在UIViewControllerSwiftUI没有Controller这个概念,视图仅是状态呈现。...对于一些实现复杂功能UIKit模组,如果完全按照SwiftUI模式将其业务逻辑彻底剥离是非常困难。因此将无法剥离业务逻辑实现代码放入协调器,靠近代理方法,便于相互之间协调和管理。...如果按照TextField正常行为,当我们在其中输入任何文本时,下方Text应该显示出对应内容,不过在我们当前代码版本,并没有表现出预期行为。

8.1K20

iOS之深入解析Xcode 13正式版发布40个新特性

四、资产目录 应用程序现在可以使用其资产目录 iOS 应用程序图标资产作为备用应用程序图标; 允许选择适用于所有平台(包括 watchOS通用系统颜色。...; 现在可以使用键盘选择和导航大纲视图组,例如 Constraints; Interface Builder 有一个重新设计画布底部栏,带有用于更改设备和布局弹出窗口,以及用于更改设备外观和方向开关...; 现在可以在 Interface Builder 场景预览以下辅助功能设置:动态类型、粗体文本按钮形状、开/关标签、增加对比度和降低透明度; 现在可以启用 UILabel showsExpansionTextWhenTruncated...作为平台; 当尝试导入本地尚不可用模块时,Xcode 现在会建议添加集合包; 现在可以在 Add Packages 添加精选包集合; 单元测试现在可以直接测试可执行目标。...四十、UIKit 对于针对 iOS 15 beta SDK 编译应用程序,在文本视图和文本字段中键入时,按键命令不再拦截文本输入和文本编辑命令。

8.7K40

何在 Swift 取消一个后台任务

一个取消按钮被添加到视图中,其点击事件是在ViewModel调用取消方法。...一种机制是向具有异步任务对象添加状态标志,并在任务运行时监视此标志。不需要对 View 进行任何更改取消按钮仍然调用 ViewModel cancel 函数。...取消任务实例 - Task.checkCancellation() 一个更优雅解决方案是为 Task 创建一个状态属性,并在下载按钮操作图中将任务分配给该属性。...此方法仍然使用Task状态属性。它被分配给下载按钮 downloadFiles 函数,任务通过视图中取消按钮取消。...SwiftUI 子任务 在 SwiftUI 取消和恢复后台任务 结论 在异步编程,重要是停止任何不需要后台任务以节省资源并避免后台任务干扰应用程序任何不良副作用。

2.7K30
领券