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

SwiftUI geometryGroup() 指南:从原理到实践

WWDC 2023 中,苹果 SwiftUI 添加了一个新修饰器:geometryGroup()。它可以解决一些之前无法处理或处理起来比较困难动画异常。...这是因为 SwiftUI 中,每个可动画视图根据 transaction 中信息自行决定自身动画行为。...出现 “Some Cases” 条件 至此,我们就可以将官方文档中 “In some cases” 条件补充完整: 父视图几何属性发生改变,且改变是动画 视图改变同时( 几何属性变化...视图几何信息发生变化时,不要同时视图中创建新内容 如果一定要在变化时视图增加新元素( 比如上面基于 GeometryReader 示例,可以将所需元素视图变化前便让其存在,通过透明度来调整其可见性...这是 SwiftUI 开发团队完成了基本布局功能后,腾出精力,进一步改善细节一个表现。同时,我们也希望苹果能够官方文档中能够提供更加清晰示例,以提高开发者学习新 API 效率。

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

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

Ask Apple 开发者与苹果工程师创造了 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文上篇。...这有点笨拙,我不认为有两个文本框是正确做法。另外,按照这种方法,@FocusState 变量会变得没有反应,而且它不能被设置 nil( 返回到以前视图并没有移除键盘 )。...例如,你可能希望有一个同时定义了 “窗口组” 和 “文档组” 应用程序,或者有一个 “窗口组” 和一个辅助 “窗口” 场景应用程序。...开发者目前仍在尝试创建一个可优雅地同时两种模式提供路径模型。阅读 SwiftUI 4.0 全新导航系统[13] ,了解它们之间不同。...某些情况下,利用惰性视图修饰器,不仅可以保持视图身份稳定,同时也能获得 SwiftUI 更多优化。例如用 .opacity(value < 10 ?

12.2K20

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

Ask Apple 开发者与苹果工程师创造了 WWDC 之外进行直接交流机会。本文对本次活动中与 SwiftUI 有关一些问答进行了整理,并添加了一点个人见解。本文下篇。...我采用了常见解决方案,即旋转滚动视图和里面的每个单元格,以获得预期倒置列表, iOS 上,这很有效。但在 macOS 上,它使 CPU 使用率保持 100%。...目前 SwiftUI 没有 API 可以限制用户字段中输入字符。很希望苹果能够继续扩展基于 FormatStyle 解决方案,让其可以实时对输入内容进行校验。...连锁动画Q: SwiftUI 中,如何实现连锁动画?例如,我想先给一个视图动画,当动画完成后立即启动另一个动画。A:不幸是,目前不可能实现连锁动画。...设置正确转场形式,可以避免非必要闪烁或动画

14.7K30

SwiftUI 动画机制

由于两个分支视图转场时会同时出现,因此只有布局容器中才会正确处理转场动画。Group 只能对其子元素进行统一设置,不具备处理两个分支视图同时出现情况(会有一个视图分支转场丢失)。...-05-09 15_14_45 有关视图结构性标识内容可以参阅 ViewBuilder 研究(下) —— 从模仿中学习[7] 显式标识 SwiftUI 中,视图设置显式识别有两种方式:ForEach...手段与效果均与 SwiftUI 原生动画能力有巨大差距。 迫切地希望 SwiftUI 能在此方面有所突破。...SwiftUI 优化动画性能方面已经做出了一些努力(比如:Canvas、drawingGroup )。希望随着代码不断优化以及硬件不断提升,会让这种差距感知越来越小。...希望本文能够对你有所帮助。同时也欢迎你通过 Twitter[11]、 Discord 频道[12]或博客下方留言板与我进行交流。

14.5K40

SwiftUI 之 HStack 和 VStack 切换

前言 SwiftUI 各种堆栈是许多框架中最基本布局工具,能够让我们定义组视图,这些组视图可以按照水平、垂直或覆盖视图对齐。...虽然可以 LoginActionsView 中放入该逻辑,但我们希望以后能复用代码,因此需要重新创建一个专门视图,作为一个独立组件来实现动态堆栈切换逻辑。...Xcode 14 一部分仍在测试阶段) 其中一个工具是新 Layout 协议,它既能让我们创建完整自定义布局,直接集成到 SwiftUI 布局系统中,同时也提供给我们一种更丝滑更动画方式各种布局之间动态切换...这样做会令动画更流畅,例如在切换设备方向时,我们也有可能在执行此类更改时获得小幅性能提升(因为 SwiftUI 总是在其视图层次结构静态时尽可能表现最佳) 选择合适视图 但我们还没有结束,因为...我们例子中,这意味着我们能同时把 HStack 和 VStack 传递给它,并且代表我们它们中间自动切换。

2.8K10

掌握 SwiftUI Safe Area

除非开发者明确要求视图突破安全区域限制,否则 SwfitUI 将尽力确保开发者创建视图都被布局到安全区域当中。SwiftUI 同时提供了一些方法和工具让开发者对安全区域有所控制。...对于视图层次上其他视图,safeAreaInesets 只反映视图中被覆盖部分。如果一个视图可以完整地放置视图安全区域中,该视图 safeAreaInsets 0。...当视图尚未在屏幕上可见时,该视图 safeAreaInset 也 0 。...iPhone 13 下表现 safeAreaTabbarDemo1 我们只调整了安全区域, SwiftUI 会自动不同设备上进行适配( iPhone 13 上,状态条高度 40 + HomeIndeicator...此时,底部状态条表现肯定不符合设计初衷。 如果想让底部状态条固定,同时保持 TextField 自动避让能力,需要通过监控键盘状态,做一点额外操作。

7.5K31

高级 SwiftUI 动画 — Part 1:Paths

前言 本文中,我们将深入探讨一些创建 SwiftUI 动画高级技术。...这些都是被官方文档完全忽略主题,SwiftUI 帖子和文章中也几乎没有提及。不过,它们还是我们提供了创建一些相当不错动画工具。...当给一个视图制作动画时,SwiftUI 实际上是多次重新生成该视图,并且每次都修改动画参数。这样,它就会从原点值渐渐走向最终值。 假设我们一个视图不透明度创建一个线性动画。...我们将在后面讨论如何保持该属性Int,并仍然执行动画。但是现在,为了使事情简单,我们只使用Double。...完整代码可以文章顶部链接 gist 文件中 Example2 中找到。 设置多个参数动画 很多时候,我们会发现自己需要对一个以上参数进行动画处理。单一Double是不够

3.7K20

SwiftUI 方式进行布局

overlay 可以很好控制建议尺寸,同时又可享受到便捷对齐设置 通过 animation(.default, value: show) 使动画与特定状态变化相关联 在上面的代码中,考虑到当 show...padding 是布局层面进行调整,添加 padding 后视图同时也会对其他视图布局产生影响。...五、LayoutPriority SwiftUI 中,设置视图优先级( 使用 layoutPriority )是一个好用但并不常用功能。...七、Transition 通过为视图设定 Transition( 转场 ),视图插入或将其移出视图树时,SwiftUI 将自动生成对应动画效果。...SwiftUI 我们提供了众多布局手段,只有充分地理解并掌握它们,方可从容应对复杂布局需求。 希望本文能够对你有所帮助。

3.2K00

SwiftUI 布局协议 - Part2

前言 Part 1 我们探索了布局协议基础知识,理解布局是如何工作打下了坚实基础。现在,是时候深入研究那些更少提及功能了,以及如何使用它们来我们带来便利。...当我们改变角度时,SwiftUI 会计算好每个视图最初和最终位置,然后动画期间内修改它们位置,从A点到B点成一条直线。...简单说,通过添加 animatableData 属性到我们布局,我们要求 SwiftUI 动画每一帧重新计算布局。但是,每个布局传递中,角度都会收到一个内插值。...例如,如果用 placeSubviews 设置去更改视图颜色,那就是安全。在案例中,可能看起来旋转会影响布局,但其实不是这样,当你旋转视图,它周围从来没产生影响,边界仍然保持不变。...视图缩放和旋转要再一次使用双向自定义值实现。 在这个例子中容器中一共有44个视图,所以我们新容器将会分别以12,12,12和8一圈。 注意本案例中如何使用缓存与子视图通信。

2.7K30

SwiftUI 方式进行布局

overlay 可以很好控制建议尺寸,同时又可享受到便捷对齐设置 通过 animation(.default, value: show) 使动画与特定状态变化相关联 在上面的代码中,考虑到当 show...padding 是布局层面进行调整,添加 padding 后视图同时也会对其他视图布局产生影响。...五、LayoutPriority SwiftUI 中,设置视图优先级( 使用 layoutPriority )是一个好用但并不常用功能。...七、Transition 通过为视图设定 Transition( 转场 ),视图插入或将其移出视图树时,SwiftUI 将自动生成对应动画效果。...SwiftUI 我们提供了众多布局手段,只有充分地理解并掌握它们,方可从容应对复杂布局需求。 希望本文能够对你有所帮助。

4.7K80

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

仅需简单配置,SwiftUI Overlay Container 即可帮你完成从视图组织、队列处理、转场、动画、交互到显示样式配置等基础工作,让开发者可以将精力更多地投入到应用程序视图实现本身。...因此,我写了一个组件希望可以帮助开发者 SwiftUI 中快速完成上述需求。但受限于当时技术能力,很多想法都没有能够很好地实现。... horizontal 和 vertical 模式下,该值视图内嵌值。...{ get } } alignment 设置视图视图容器中 alignment。...tapToDismiss 在为视图设置了 backgroundStyle 情况下,是否允许通过点击背景来撤销视图。 详情参看项目演示代码 backgroundStyle 容器视图设置背景。

2.1K20

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

大幅改善了 ScrollView 控制力 本次升级中, ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 视图进入后...com.apple.CoreData.ConcurrencyDebug 1 后,即使 Context 中使用 transaction 尝试保持线程一致,仍会强制报错(即使是一个新创建 actor...转换为 SwiftData 代码,但目前问题还不少,当有多个选项,或属性类型 transformable ,无法很好地应对 Model 原来设置 Index,目前无法转换(可生成对应代码,但 Attributed...开心还是无奈 今年 WWDC 中,苹果 SwiftUI 带来了非常大变革,并推出了开发者向往已久 SwiftData。...对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

34310

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

大幅改善了 ScrollView 控制力 本次升级中, ScrollView 带来了新动态滚动定位系统( 不依赖 ScrollViewReader 和显式 id 声明)、一次性定位系统( 视图进入后...com.apple.CoreData.ConcurrencyDebug 1 后,即使 Context 中使用 transaction 尝试保持线程一致,仍会强制报错(即使是一个新创建 actor...转换为 SwiftData 代码,但目前问题还不少,当有多个选项,或属性类型 transformable ,无法很好地应对 Model 原来设置 Index,目前无法转换(可生成对应代码,但 Attributed...开心还是无奈 今年 WWDC 中,苹果 SwiftUI 带来了非常大变革,并推出了开发者向往已久 SwiftData。...对于绝大多数开发者来说,一旦能够应用中使用这些新功能,苹果或许又会带来更多新诱惑。SwiftUI 新特性极大拓展了其表达能力,但同时也增加了其学习曲线,特别是对初学者而言。

1.1K20

SwiftUI 下定制手势

GestureState 专门 SwiftUI 手势开发属性包装器类型,可作为依赖项驱动视图更新。...resetTransaction 可以设置恢复初始数据时动画状态 组合手势手段 SwiftUI 提供了几个用于手势组合方法,可以将多个手势连接起来,重构成其他用途手势。...例如,下面的代码视图中创建了一个可同时支持缩放和旋转手势: struct GestureDemo: View { @GestureState(resetTransaction: .init(...1.2 思路 SwiftUI 预置手势中,仅有 DragGesture 提供了可用于判断移动方向数据。根据偏移量来确定轻扫方向,使用 map 将繁杂数据转换成简单方向数据。...minimumDistance 设置 0 时,其第一条数据产生时间一定早于 TapGesture(count:1) 激活时间• simultaneously 中,一共有三个 onEndend 时机

2.6K20

自定义 Button 外观和交互行为

SwiftUI 中,Button 默认交互行为是松开按钮同时执行 Button 指定操作。...默认情况下,即使单元格视图中包含了多个按钮,SwiftUI 也只会将 List 单元格视作一个按钮( 点击后同时调用所有按钮操作 )。...例如:无法 List 中 NavigationLink 设置样式 Button label 视图或 ButtonStyle 实现中添加手势操作( 例如 TapGesture )将导致 Button...不再调用其指定闭包操作,附加手势需 Button 之外添加( 例如下文 simultaneousGesture 实现 )按钮添加 Trigger SwiftUI 中,为了判断某个按钮是否被按下...希望未来版本中,SwiftUI 可以为开发者提供更加强大自定义组件能力。希望本文能够对你有所帮助。

3.6K60

SheetKit——SwiftUI模态视图扩展库

[1] SheetKitGithub地址 https://github.com/fatbobman/SheetKit SheetKit是什么 SheetKit[2]是一个SwiftUI模态视图增强库...主要因为SwiftUI中重要视图展示模式:NavigationView、Sheet等都没有迅捷、简便重置能力。很难通过一两句代码将应用程序立即设置成我们想要视图状态。...因此,在此种情况下,通常我们会将所有的模态视图集中管理起来,统一调用。请参阅我之前文章——SwiftUI中,根据需求弹出不同Sheet[3]。...•新半高模态视图WWDC 2021中,苹果大家带来了期待已久半高模态视图。或许推出比较仓促,这种很受欢迎交互方式并没有提供SwiftUI版本,仅支持UIKit。...SwiftUI3.0中,已经可以使用原生API生成各种毛玻璃效果了。但只有将模态视图背景设置透明,毛玻璃效果才能显现出来。

2.8K20
领券