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

SheetKit——SwiftUI模态视图扩展库

SheetKit——SwiftUI模态视图扩展库 新写了个的SwiftUI Sheet扩展库,添加对可变高度Sheet的支持。...主要因为SwiftUI中重要的视图展示模式:NavigationView、Sheet等都没有迅捷、简便的重置能力。很难通过一两句代码将应用程序立即设置成我们想要的视图状态。...•模态视图的集中管理SwiftUI通常采用.sheet来创建模态视图,对于简单的应用来说,这种形式非常直观,但如果应用程序的逻辑比较复杂、需要的模态视图众多,则上述方式就会让代码显得十分混乱,不易整理。...请参阅我之前的文章——在SwiftUI中,根据需求弹出不同的Sheet[3]。•新的半高模态视图在WWDC 2021中,苹果为大家带来了期待已久的半高模态视图。...[2] SheetKit: https://github.com/fatbobman/SheetKit [3] 在SwiftUI中,根据需求弹出不同的Sheet: https://www.fatbobman.com

2.9K20

SwiftUI 与前端框架(如 React)中的状态管理对比

摘要在构建现代应用时,状态管理是决定应用复杂性和可维护性的关键。SwiftUI 和 React 都采用声明式 UI 模型,但它们的状态管理方式不同。...SwiftUI 的状态管理SwiftUI 的状态管理主要依靠属性包装器,如 @State、@Binding 和 @EnvironmentObject 来管理不同类型的状态。...React 主要依赖函数式组件的钩子来控制状态,而 SwiftUI 通过属性包装器实现类似功能。SwiftUI 的状态管理更加语法化,React 则具有灵活性。...SwiftUI 中的应用与挑战状态管理简化:SwiftUI 的 @State 和 @EnvironmentObject 使得状态管理变得直观。...小结SwiftUI 和 React 都提供了高效的状态管理机制。SwiftUI 的状态管理基于属性包装器,而 React 依赖钩子函数。

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

    掌握 Transaction,实现 SwiftUI 动画的精准控制

    每当状态发生变化时,SwiftUI 会根据是否由“显式动画”发起或是否有声明”隐式动画”等情况按需生成新的 transaction,并在需要的视图层次中进行传递。...SwiftUI 发现 Text("Hello") 和包裹它的 VStack 两个视图链会在状态变化时发生变化。...在状态变化结束后,SwiftUI 重置了 VStack 和 Text("Hello") 外侧的 transaction(nil)。...SwiftUI 可能会在状态改变后为部分视图重置 transaction( 值为 nil ),即使没有重置,也不影响下次的动画( 下次状态变化时,会生成新的 transaction )。...根据我的测试,SwiftUI 将为所有在本次状态变化时( withAnimation 闭包引发)发生视觉变化的视图分支派发 transaction。

    53420

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

    原文发表在我的博客 肘子的Swift记事本视图变化在前、状态变化在后在 SwiftUI 中,某些可编程控件在执行一定的操作时,会先更新视图,待视图变化完成后再修改与其对应的状态。...这些控件基本上都是对 UIkit(AppKit)的二次包装。Sheet执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联的状态是在 Sheet 完成取消动画后才发生了改变。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了的先调整状态,后更新视图的操作。...为什么状态更新滞后会导致严重错误由于 SwiftUI 的 不透明性,想要分析这些问题的成因并不容易。...状态更新滞后不仅存在于本文介绍的两个案例中,当开发者遇到类似情况时,可以尝试采用状态更新优先的开发策略进行修改。总结今年 SwiftUI 已经进入了第五个年头。

    761110

    老人新兵 —— 一款 iOS APP 的开发手记

    考虑到身体也已经恢复到了一个不错的状态,就决定尝试做一个能满足自己需求的 app, 一方面是活动活动脑子,另一方面也算重拾当前的兴趣。...,不过就不优美了;切换页面 view 会重置状态,比如说 view1 里有个 ScrollView, 你已经进行了滚动,当你通过 TabView 切换到其他视图后切换回来,ScrollView 不会保留在原来的地方...,直接会回到顶部由于切换重置,在复杂页面加载时效率低到可怕。...我的 app 中有几处 Sheet 弹出的响应就比较慢( 将 view 移出 sheet,使用 NavigationLink 调用显示就很好 ),尤其是退出时的响应更慢。...但我一时头脑发热在 app 已经进入了 review 的情况下改动了资费的元数据,结果 app 被拒,而此时该资费便始终处于审核状态。

    2.5K40

    如何在 Git 中重置、恢复,返回到以前的状态

    在本文中,我们将带你了解如何去重置、恢复和完全回到以前的状态,做到这些只需要几个简单而优雅的 Git 命令。 重置 我们从 Git 的 reset 命令开始。...例如,如果我们重置 master 为当前提交回退两个提交的位置,我们可以使用如下之一的方法: $ git reset 9ef9173 (使用一个绝对的提交 SHA1 值 9ef9173) 或: $ git...这些选项包括:hard 在仓库中去重置指向的提交,用提交的内容去填充工作目录,并重置暂存区;soft 仅重置仓库中的指针;而 mixed(默认值)将重置指针和暂存区。...实际上,它重置了(清除掉)暂存区,并用你重置的提交内容去覆盖了工作区中的内容。在你使用 hard 选项之前,一定要确保这是你真正地想要做的操作,因为这个命令会覆盖掉任何未提交的更改。...你看到的相关命名格式,去重置任何一个东西: $ git reset HEAD@{1} 一旦你理解了当“修改”链的操作发生后,Git 是如何跟踪原始提交链的基本原理,那么在 Git 中做一些更改将不再是那么可怕的事

    4K20

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

    视图变化在前、状态变化在后 在 SwiftUI 中,某些可编程控件在执行一定的操作时,会先更新视图,待视图变化完成后再修改与其对应的状态。这些控件基本上都是对 UIkit(AppKit)的二次包装。...Sheet 执行下面的代码,你可以清楚地看到,在通过手势取消 Sheet 时,与其关联的状态是在 Sheet 完成取消动画后才发生了改变。...而通过调用环境值或直接修改绑定状态,SwiftUI 则遵循了响应式编程原则,进行了的先调整状态,后更新视图的操作。...为什么状态更新滞后会导致严重错误 由于 SwiftUI 的 不透明性,想要分析这些问题的成因并不容易。...状态更新滞后不仅存在于本文介绍的两个案例中,当开发者遇到类似情况时,可以尝试采用状态更新优先的开发策略进行修改。 总结 今年 SwiftUI 已经进入了第五个年头。

    37020

    如何在SwiftUI中实现interactiveDismissDisabled

    如何在SwiftUI中实现interactiveDismissDisabled 如想获得更好的阅读体验,可以访问我的博客www.fatbobman.com[1] 本文中我们将探讨如何实现一个SwiftUI...去年9月,我在文章【在SwiftUI中制作可以控制取消手势的Sheet】[3]中介绍了健康笔记2.0[4]版本的Sheet控制实现方法。...在今年推出的SwiftUI 3.0版本中,苹果添加了一个新的View扩展:interactiveDismissDisabled,该扩展实现了上面的第一个要求——通过代码控制是否允许手势取消Sheet。...这种实现是我所喜欢的,也给了我很大的启发。 在WWDC 2021 观后感[6]一文中,我们已经探讨过SwiftUI3.0将会影响非常多的第三方开发者编写SwiftUI扩展的思路和实现方式。...中制作可以控制取消手势的Sheet】: https://www.fatbobman.com/posts/swiftui-dismiss-sheet/ [4] 健康笔记2.0: https://www.fatbobman.com

    3.9K40

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

    与之不同的是,针对值类型的主要注入手段 @State,SwiftUI 则为其实现了高度的优化机制( EnvironmentValue 没有提供优化,行为与引用类型注入行为一致 )。...代码块中的 SheetInitMonitorView 没有任何输出( 意味着闭包没有被调用 ),只有在模态视图进行显示时,SwiftUI 才执行 .sheet 闭包中的函数,创建 Sheet 视图。...中的视图已完成创建 dump(_n) }}Sheet 视图的上下文当 SwiftUI 创建并显示一个 Sheet 视图时,并非在现有的视图树上创建分支,而是新建一棵独立的视图树。...也就是说 Sheet 中的视图与原有视图分别处于不同的上下文中。在 SwiftUI 早期的版本中,对于分别位于不同上下文的独立的视图树,开发者需要显式为 Sheet 视图树注入环境依赖。...,但 ContextView 的 body 并未重新求值由于 show 转变为 true ,SwiftUI 开始调用 .fullScreenCover 的闭包,创建 Sheet 视图尽管 show 也是通过

    1.9K20

    SwiftUI:alert() 和 sheet() 与可选值一起使用

    SwiftUI有两种创建警报和表单的方式,到目前为止,我们仅使用一种方法:绑定到布尔值,该布尔值在变为 true 时显示 Alert 或 Sheet。...第二种方法并不经常使用,但是在您需要的时候它确实有用:您可以使用可选的Identifiable对象作为条件,并且当该对象具有值时将显示 Alert 或Sheet 。...它的闭包将为您提供用于条件的非可选值,因此您可以安全地使用它。...出现提示“Taylor Swift”的警报。解除警报后,SwiftUI会将selectedUser设置为nil。 这似乎是一个简单的功能,但是比其他功能更简单,更安全。...参考 Alert弹窗 SwiftUI:ActionSheet 弹窗 SwiftUI:Sheet 视图 译自 Using alert() and sheet() with optionals

    2.5K40

    SwiftUI 状态管理系统指南

    前言 SwiftUI与苹果之前的UI框架的区别不仅仅在于如何定义视图和其他UI组件,还在于如何在整个使用它的应用程序中管理视图层级的状态。...本周,让我们仔细看看这些属性包装器中的每一个,它们之间的关系,以及它们如何构成SwiftUI整体状态管理系统的不同部分。...属性状态 由于SwiftUI主要是一个UI框架(尽管它也开始获得用于定义更高层次结构(如应用程序和场景)的API),其声明式设计不一定需要影响应用程序的整个模型和数据层——而只是直接绑定到我们各种视图的状态...观察和修改环境变量 最后,让我们来看看SwiftUI的环境系统如何被用来在两个互不直接连接的视图之间传递各种状态。...我希望这篇指南能成为一个很好的方式来概述SwiftUI的各种状态处理机制,尽管一些更具体的API被遗漏了,这篇文章中强调的概念应该涵盖了所有基于SwiftUI的状态处理的绝大多数用例。

    5.1K20

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

    是否有任何建议用来检测列表中的行选择,类似于 “NavigationLink”,但不导航到另一个视图(例如,显示 Sheet 或从列表中选择一个选项 )?...在单元测试中,很难对 SwiftUI 视图中的依赖( 符合 DynamicProperty 协议 )进行测试。这也是 Redux-like 框架的优势之一( 将状态从视图中抽离出来,方便测试 )。...然后根据它的焦点状态来定制它的显示样式。希望这对你的设计有用。自从 SwiftUI 3.0 提供了 safeAreaInset 视图修饰器之后,实现问题中的案例将不再是难事。...阅读 SwiftUI 的动画机制[8] 一文,了解更多有关动画的内容。自适应高度 SheetQ:如何在 iOS16 中呈现与动态内容高度相匹配的 Sheet?...A:目前最好的方法是建立一个导航状态模型对象,它持有导航状态的规范表示,它可以为你的正常和紧凑显示提供专门的程序绑定。

    12.3K20

    SwiftUI 的动画机制

    SwiftUI 采用了声明式语法来描述不同状态下的 UI 呈现,动画亦是如此。官方文档将 SwiftUI 的动画(Animations)定义为:创建从一个状态到另一个状态的平滑过渡。...在 SwiftUI 中,我们不能命令某个视图从一个位置移动到另一个位置,为了实现上述效果,我们需要声明该视图在状态 A 时所处的位置以及状态 B 时所处的位置,当由状态由 A 转到 B 时,SwiftUI...linear_value_sheet image-20220504111032123 时序曲线函数( Animation )easeInOut(duration:0.3)对应的数值变化: easeInOut_value_sheet...比如,在出场动画进行中时,将状态 show 恢复成 true ,SwiftUI 将会保留当前的分支状态(不会重新创建视图,参见本文附带的范例)。...状态、视图标识、动画 既然 SwiftUI 的动画是创建从一个状态到另一个状态的平滑过渡,那么我们必须对状态(依赖项)的改变可能导致的结果有正确的认识。

    14.8K40

    肘子的 Swift 周报 #036 | WWDC 2024 观后感

    SwiftUI 初次接触 SwiftUI 今年的新特性时,我并未感到特别兴奋。然而,做了更多的研究后,我意识到此次更新在 SwiftUI 的发展史上将具有十分重要的意义。...从这个版本开始,SwiftUI 开发团队似乎找到了快速发展 SwiftUI 的正确路径,探索出了在保持声明式框架特性的同时,有效提升其表现力的方法。...随着 SwiftUI 与 UIKit 框架之间动画、转场和手势等机制的共享,SwiftUI 正逐渐从仅基于 UIKit/AppKit 的框架,转变为与苹果生态中其他 UI 框架更平等的合作伙伴。...a sidebar[15] by Donny Wals[16] Present a form sheet in SwiftUI[17] by Natalia Panferova[18] Enhanced...a sidebar: https://t.ly/6faFm [16] Donny Wals: https://twitter.com/donnywals [17] Present a form sheet

    13410

    TCA - SwiftUI 的救星?(一)

    它不仅有更加合理的异步方法和全新特性,更是修正了诸多顽疾。可以说,从 iOS 14 开始,SwiftUI 才算逐渐进入了可用的状态。...SwiftUI 最基础的状态管理模式,做到了 single source of truth:所有的 view 都是由状态导出的,但是它同时也存在了很多不足。...测试困难: 这可能和直觉相反,因为 SwiftUI 框架的 view 完全是由状态决定的,所以理论上来说我们只需要测试状态 (也就是 model 层) 就行,这本应是很容易的。...因此,想要在 SwiftUI 中实现 TEA,我们需要做的是实现 1 至 3。或者换句话说,我们需要的是一套规则,来把零散的 SwiftUI 状态管理的方式进行规范。...为 Counter 补全所有测试 现在测试中只包含了 .increment 的情况。请添加减号和重置按钮的相关测试。

    3.3K30

    AVKit框架详细解析(四) —— 基于AVKit 和 AVFoundation框架的视频流App的构建

    接下来,找到 List 中的按钮,在 Open Video Player注释下添加以下代码: selectedVideo = video 然后,将 fullScreenCover(item:onDismiss...3) AVPlayerItem:AVAsset 的动态对应物。此对象表示可播放视频的当前状态。这是您需要提供给 AVPlayer才能使事情顺利进行的内容。...问题是你不能直接在 SwiftUI 中使用这个层。 毕竟 SwiftUI 没有 CALayer的概念。 为此,您需要回到 UIKit。...当谈到“跟踪”播放器的信息时,唯一的途径就是使用键值观察(KVO)。 是的,这是 Apple 提出的最奇怪的 API 之一。 如果你小心,它是一种实时观察和响应状态变化的强大方法。...SwiftUI 世界中非常好的工具!

    7K10
    领券