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

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

设计动机 当我们需要在视图上层显示内容(例如:弹出信息、侧边菜单、帮助提示等)时,有很多优秀第三方解决方案可以帮助我们分别实现,但没有一个方案可以同时应对不同场景需求。...在 SwiftUI 中,描述视图已经变得十分容易,因此我们完全可以将上述场景中显示逻辑提炼出来,创建出一个可以覆盖更多使用场景库,帮助开发者组织视图显示风格和交互逻辑。...容器显示类型( Display type ) stacking 当容器内同时显示多个视图时,视图沿 Z 轴排列。其表现同 ZStack 类似。...使用者通过调用容器管理器特定方法,让指定容器执行显示视图、撤销视图等工作。 容器管理器环境值 在 SwiftUI 中,视图代码通过环境值调用容器管理器。...animation 在 SwiftUI 视图外使用 如果想在 SwiftUI 视图之外调用容器管理器,可以直接调用 ContainerManager 单例: let manager = ContainerManager.share

2.1K20

探索 SwiftUI 基本手势

前言 在 SwiftUI 中,我们可以通过添加不同交互来使我们应用程序更具交互性,这些交互可以响应我们点击,点击和滑动。...Circle() .onTapGesture { // Respond to Tap Gesture } SwiftUI 文档中使用其他选项是通过创建手势并将其配置为属性,然后将其与...我们可以设置一个最小持续时间,以识别我们长按手势。可以在 LongPressGesture 初始化程序中进行设置。...LongPressGesture(minimumDuration: 2) 然后,我们可以使用 .updating 方法在长按期间执行操作,并使用 .onEnded 在识别到我们手势时执行操作。...在此示例中,我将在长按操作期间更新 Circle() 大小和颜色,并且当识别出手势时,我将显示“文本已完成”。

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

SwiftUI 下定制手势

SwiftUI 手势在某种程度上降低了使用门槛,但由于缺乏提供底层数据 API,严重制约了开发者深度定制能力。...在 SwiftUI 下,我们无法拥有类似构建全新 UIGestureRecongnizer 能力。所谓自定义手势,其实只是对系统预置手势重构而已。...手势在按压过程中,可以根据指定时间间隔进行类似 onChanged 回调。本例程着重演示如何通过视图修饰器包装手势方法以及 GestureState 使用。...TapGesture、LongPressGesture 均在满足触发条件后会自动终止手势,无法实现对任意时长支持 2.6 不足及改善方法 当前解决方案没有提供类似 LongPressGesture...在本例中,我们选择在 TapGesture onEnded 中回调用户闭包 总结 当前 SwiftUI 手势,暂处于使用门槛低但能力上限不足状况,仅使用 SwiftUI 原生手段无法实现非常复杂手势逻辑

2.6K20

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

是否有任何建议用来检测列表中行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...A:看一下上下文菜单修饰器( contextMenu ) primaryAction 参数。该 API 也有一个 forSelectionType 参数,支持多选。...在 SwiftUI 4.0 中,contextMenu 功能获得了不小提高。例如一个上下文菜单中可以有多个选项、支持 primaryAction、以及可定制预览视图。...这也可以和 OpenWindowAction[16] 一起使用。请注意,你数据需要是可选,或者指定一个默认值,因为在某些情况下,框架自身也会创建窗口( 例如,当选择新窗口菜单项 )。...A:实现近似行为方法是在菜单使用命令来提供相同操作。通常情况下,应该有列表让人们知道有哪些键盘快捷键可用。但是,如果这不适合你使用情况,我们会对这方面的增强请求反馈感兴趣。

12.2K20

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

因此,如果你正在创建一个视图来显示可滚动内容,并可能进行选择操作,那么在 iOS 和 macOS 上使用 List 将有最好体验。...Table 中上下文菜单Q:如果我在 TABLE 上添加了一个上下文菜单,我如何确定哪一行导致了菜单显示(无需选择该行)?...Swiftcord[12] 代码展示了如何在 SwiftUI 下实现倒置列表。阅读 优化在 SwiftUI List 中显示大数据集响应效率[13] 一文,了解苹果工程师推荐方法。...对于类似的情况,也可以不使用显式动画驱动( 不使用 withAnimation ),只需将 .animation(.default, value: isPresented) 移动到 VStack 之外即可...Too complex to type checkQ:我在 iOS 14 SwiftUI 中遇到一个问题,我试图有条件地显示 3 个符合 Shape 协议对象中一个。

14.7K30

史上最强APP菜单栏设计解析!

01显示最重要栏目 Tab bar应该只包含最有用目标页面入口,添加无用入口会让Tab bar变得混乱。要记住,Tab bar入口一定是用户使用最高频。...特别做法:Pinterest隐藏文字 Pinterest做法非常特别,在用户刚开始使用应用时候,会显示文本+icon方式,随着时间推移用户习惯了之后,Pinterest会隐藏标签。...05 避免隐藏菜单栏 避免自动隐藏菜单栏,因为它包含了最重要内容,如果隐藏后会增加用户使用难度。所以,确保始终显示菜单栏,几乎所有的应用都应该遵循这一准则。当然,也有一些特别的应用例外。...06 按约定顺序排列菜单 按顺序排列菜单内容是必要,因为每个应用程序都是为了更好清晰度和可用性而这样做,用户喜欢看到排列好东西,菜单栏就是其中之一。大型应用程序基本上遵循类似的设计规则。...Pinterest 过去常常首先显示主屏幕,搜索标签用于搜索内容,通知标签用于更新和配置文件用于其他东西。

1.8K30

用 Table 在 SwiftUI 下创建表格

image-20220620142551830 上图是我们使用 List 创建一个有关 Locale 信息表格,每行都显示一个与 Locale 有关数据。...,SwiftUI 会扩展更多样式到 iPadOS 平台 行选择 在 Table 中启用行选择与 List 中方式十分类似: struct TableDemo: View { @State var...} } } table_drag_demo_2022-06-20_19.36.09.2022-06-20 19_37_28 交互 除了行选择和行拖拽外,Table 还支持对行设置上下文菜单...出现上述问题主要原因是,苹果没有采用其他 SwiftUI 控件常用编写方式( 原生 SwiftUI 容器或包装 UIKit 控件),开创性地使用了 result builder 为 Table 编写了自己...上下文菜单、选择 ) List( Grid 中 GridRow 并非真正意义上行 ) 需要视图可渲染( 保存成图片 ) LazyVGrid、Grid 可固定标题行 List、LazyVGrid、Grid

3.9K30

SwiftUI 4.0 全新导航系统

基于类型响应式目标视图处理机制 比如下面的代码是在老版本( 4.0 之前 )SwiftUI使用编程式跳转一种方式: struct NavigationViewDemo: View { @...Detail 栏( 最右侧栏 ) doubleColumn 在三栏状态下隐藏 Sidebar ( 最左侧 )栏 all 显示所有的栏 automatic 根据当前上下文自动决定显示行为 上述选项并非适用于所有的平台...,例如,在 macOS 上,detalOnly 不会起作用 如果想在 SwiftUI 4.0 之前版本上使用类似的功能,可以参考我在 用 NavigationViewKit 增强 SwiftUI 导航视图...iPad 在 landscape 显示状态下,默认即为此种模式 automatic 默认值,根据上下文自动调整外观样式 在 NavigationTitle 中添加菜单 使用 navigationTitle...构造方法,可以将菜单嵌入到标题栏中。

10.2K62

一段因 @State 注入机制所产生“灵异代码”

dump(_n) }}Sheet 视图上下文SwiftUI 创建并显示一个 Sheet 视图时,并非在现有的视图树上创建分支,而是新建一棵独立视图树。...也就是说 Sheet 中视图与原有视图分别处于不同上下文中。在 SwiftUI 早期版本中,对于分别位于不同上下文独立视图树,开发者需要显式为 Sheet 视图树注入环境依赖。...这意味着,相较于在原有视图树上创建分支,在新上下文中重建视图树开销更大,需要进行工作也更多。而 SwiftUI 为了优化效率,通常会对若干操作进行合并。...方案二、使用 @StateObject 强制刷新我们可以通过创建引用类型 Source 来避免在不同上下文之间关联 State 可能出现顺序错误。...在面对这些“灵异现象”时,如果我们能对其进行更多研究,那么不仅可以在今后避免类似的问题,而且在分析过程中,也能对 SwiftUI 各种运行机制有深入掌握。希望本文能够对你有所帮助。

1.9K20

肘子 Swift 周报 | Swift,超越苹果生态!

社区不仅为语言增添了更适合嵌入式开发 功能和示例[6],更有厂商推出了易于使用 一体化开发套件[7]。...需要用开放心态和全新视角去学习和使用这些新工具。将采用新框架过程视为将项目向更安全、更现代化方向重构绝佳机会。...在实际开发中,Edvinas Byla 意识到 LazyVGrid 性能并不理想,且不能满足他对上下文菜单行为特定需求,因此他决定采用 NSTableView 作为替代方案。...通过对 NSTableView 和 NSTableCellView 精心定制,他不仅显著优化了滚动体验,还解决了上下文菜单相关问题。...实际上,该应用复杂模板编辑器几乎完全使用 SwiftUI 开发,且表现出色。这一点彰显了 SwiftUI 在实际应用中强大潜力和灵活性。

11210

如何在Xcode下预览含有Core Data元素SwiftUI视图

结合两年来我在SwiftUI使用Core Data经验和教训,我们将在本文中探讨: •导致SwiftUI预览崩溃部分原因•如何在之后开发中避免类似的崩溃出现•如何在Xcode中安全可靠地预览含有...Redux-like SwiftUI + Combine是苹果推出声明+响应式结构方案。SwiftUI应用程序开发逻辑非常类似于Redux设计模式。...由于前文中提到SwiftUI App life cycle独特性,你无法在根视图中使用单例来注入持久化上下文。...由于预览也是模拟器,在它沙盒中同样可能出现类似的问题。可以使用上文中关于预览模拟器修复方法来尝试解决。...SwiftUI通常采用Redux开发模式,通过将获取到Core Data数据转换成标准Swift结构从而避免在视图中使用托管对象上下文或托管对象。

5.1K10

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中滚动到顶端子视图缩小视觉效果...在不考虑兼容旧版本情况下,我认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者在相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表在推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器) Attribute 派生选项被废弃了 可以在 Xcode 中使用 Model Editor 将 Model...对于绝大多数开发者来说,一旦能够在应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

34610

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

,直接定位到滚动视图特定位置,只能使用一次 )、全新滚动条控制( 闪烁 )、可自定义行视图在滚动区域顶端和显示区域显示状态( 例如可用其实现类似 watchOS 中滚动到顶端子视图缩小视觉效果...在不考虑兼容旧版本情况下,我认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者在相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是我目前整理一些有关 SwiftData 问题和注意事项( 原文发表在推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本中,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...性质与通过宏创建 Observed 状态类似,可直接驱动视图更新(传递时无需使用属性包装器) Attribute 派生选项被废弃了 可以在 Xcode 中使用 Model Editor 将 Model...对于绝大多数开发者来说,一旦能够在应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

1.1K20

SwiftUI 与 Core Data —— 数据获取

本文中我们将探讨在 SwiftUI 视图中批量获取 Core Data 数据方式,并尝试创建一个可以使用 mock 数据 FetchRequest。...由于最终我们需要在视图中使用 AnyConvertibleValueObservableObject( 托管对象 ),因此数据获取过程必须是在主线程上下文中进行( 数据绑定上下文是 ViewContext...FetchRequest 获取 )由于 TCA Reducer 无法与视图存续期自动绑定,上面的可感知延迟在每次触发 onAppear 时都将出现最终,我决定放下心结,仍然采用在视图中使用类似...MockableFetchRequest 使用方法MockableFetchRequest 提供与 FetchRequest 类似的动态获取数据能力,但它有如下特点:MockableFetchRequest...数据( 因为 WrappedID 存在,我们可以很容易创建 mock 数据 )无论上述哪种方式,开发者都需放弃使用 SwiftUI 原生 Section 功能,在惰性容器中,根据提供附加数据自行对数据做分段显示处理

4.6K30

Xcode15新特性

创建项目 导航区第三个菜单 Symbol navigator 替换为 Bookmark navigator。 导航区 调试区菜单发生变化,并且输出内容随着不同级别拥有不同背景色。...(macro)实现 SwiftUI 一样进行实时预览。...image.png 代码支持添加 Bookmark,在某一行代码或者选中多行代码后右击,可以看到相应添加菜单。可以在 Bookmark navigator 中查看添加所有 Bookmark。...条件编译代码随着选择条件会高亮显示对应条件编译代码。 右击菜单 Show Quick Help 显示更加丰富文档内容。...编辑时 Quick Actions 可以快捷访问对应内容所有菜单,快捷键command + shift + A。 遇到多参数方法时,可以通过键盘方向键 —> 显示所有可能参数组合。

1.4K30

iOS开发之手势识别

下面会先给出如何用storyboard给相应控件添加手势,然后在用纯代码方式给我们控件添加手势,手势用法比较简单。和button用法类似,也是目标动作回调,话不多说,切入今天正题。...不过用storyboard可以减少我们工作量,这两个要配合着使用才能大大提高我们开发效率。...alloc] initWithTarget:self action:@selector(longPressGesture:)]; 3 //设置长按时间 4 longPressGesture.minimumPressDuration...= 0.5; //(2秒) 5 [self.view addGestureRecognizer:longPressGesture];      在对应回调方法中添加相应方法(当手势开始时执行...(通过translationInView获取移动点,和TouchesMoved方法类似) 1 //拖动手势 2 -(void) panGesture:(id)sender 3 { 4 UIPanGestureRecognizer

2.6K90

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

新框架使用声明性范例,让开发者用更少代码编写相同 UI。 SwiftUI 愿景是降低开发 iOS 门槛,吸引更多开发者、丰富 iOS 业态。...这是个宝贵机会,能让我认真体验一把 SwiftUI 并探索其内部工作原理。 起初项目工作良好,我对 SwiftUI 表现可以说非常满意,我甚至创建了自己修改器,以便更轻松地显示警报消息。...利用这款工具,我可以用多个 sprite 拼接成复杂资产,再最终为它们制作动画。它显示效果就是主窗口中一张表,出于学习目的,我当然还是想继续用 SwiftUI 喽。...我需要为每个上下文创建一个视图,这些视图同时又是其他视图「子视图」,然后把需要数据传递给特定视图。...我刚开始以为是因为地图编辑器 SpriteKit 主视图仍在后台渲染。所以我尝试在工作表显示出来后禁用渲染,但结果没有任何改变。 变更从一种环境传播至另一环境时,我也遇到了类似的延迟问题。

4.9K20

打造可适配多平台 SwiftUI 应用

100% 基于 SwiftUI 开发,目前支持三个平台: iPhone、iPad 和 macOS。使用者可以通过它来浏览电影信息,包括正在上映以及即将上映影片。...图片mac 版本进行了更多符合 macOS 风格适配,例如:使用了符合 mac 规范设置视图、支持指针悬浮响应、菜单栏图标,并且支持创建新窗口并直接跳转到特定电影类别(基于数据驱动 WindowGroup...这种做法不仅可以解决跨平台兼容性问题,还有其他好处:可以改善视图中代码整洁度(减少条件编译语句使用)可以改善 SwiftUI 在不同版本之间兼容性当然,要创建并使用这类代码,前提是开发者必须已经对...通过点击任意窗口中任意 Tab 中 “Hit Me” 按钮来增加点击次数。点击次数显示在窗口上方。...虽然 SingleStoreDemo 使用 TCA 作为数据流框架,但这并不代表 TCA 在实现类似需求时有特别的优势。

3.1K80
领券