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

为什么不能在我的整个模式视图上使用SwiftUI中的.gesture()?

在SwiftUI中,.gesture()是一个用于添加手势识别的修饰符。然而,它不能直接应用于整个模式视图上的原因是,模式视图是一种特殊的视图类型,它负责管理和布局其子视图。因此,如果我们直接在模式视图上使用.gesture(),手势将无法正确地传递给子视图。

为了解决这个问题,我们可以使用其他方法来添加手势识别。一种常见的方法是使用overlay()修饰符将手势添加到模式视图上方的透明视图上。这样,手势将被正确地传递给子视图,并且不会影响模式视图的布局和功能。

下面是一个示例代码,演示了如何在模式视图上使用手势识别:

代码语言:txt
复制
struct ContentView: View {
    @State private var offset = CGSize.zero
    
    var body: some View {
        ZStack {
            // 模式视图
            RoundedRectangle(cornerRadius: 10)
                .fill(Color.blue)
                .frame(width: 200, height: 200)
                .offset(offset)
                .gesture(
                    DragGesture()
                        .onChanged { value in
                            self.offset = value.translation
                        }
                        .onEnded { _ in
                            self.offset = CGSize.zero
                        }
                )
            
            // 透明视图,用于添加手势
            Color.clear
                .frame(width: 200, height: 200)
                .gesture(
                    DragGesture()
                        .onChanged { value in
                            self.offset = value.translation
                        }
                        .onEnded { _ in
                            self.offset = CGSize.zero
                        }
                )
        }
    }
}

在这个示例中,我们使用ZStack将模式视图和透明视图叠加在一起。模式视图是一个蓝色的圆角矩形,透明视图是一个与模式视图相同大小的透明颜色视图。我们将手势添加到透明视图上,以确保手势能够正确地传递给模式视图。

这样,我们就可以在整个模式视图上使用手势识别,而不会影响其布局和功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

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

因此,写了一个组件希望可以帮助开发者在 SwiftUI 快速完成上述需求。但受限于当时技术能力,很多想法都没有能够很好地实现。...在 SwiftUI ,描述视图已经变得十分容易,因此我们完全可以将上述场景显示逻辑提炼出来,创建出一个可以覆盖更多使用场景库,帮助开发者组织视图显示风格和交互逻辑。...快速使用指南 更详细信息,可以参看库演示以及源代码注释。...当给定视图数量超过了容器设定最大视图数量时,超过视图会暂存在等待队列,并在已显示视图取消后,逐个递补。 multiple oneByOne 同一时间只能在容器显示一个视图。...使用者通过调用容器管理器特定方法,让指定容器执行显示视图、撤销视图等工作。 容器管理器环境值 在 SwiftUI ,视图代码通过环境值调用容器管理器。

2.1K20

SwiftUI 下定制手势

相较 State 有如下不同: •只能在手势 updating 方法修改,在视图其它地方为只读•在手势结束时,与之关联(使用 updating 进行关联)手势会自动将其内容恢复到它初始值•通过...1.2 思路 在 SwiftUI 预置手势,仅有 DragGesture 提供了可用于判断移动方向数据。根据偏移量来确定轻扫方向,使用 map 将繁杂数据转换成简单方向数据。...AnyGesture在 Gesture 协议,需要实现一个隐藏类型方法:_makeGesture。...当我们不在结构体中使用自定义 Value 类型时,SwiftUI 可以推断出 Self.Body.Value,此时可以将 body 声明为some Gesture。...在本例,我们选择在 TapGesture onEnded 回调用户闭包 总结 当前 SwiftUI 手势,暂处于使用门槛低但能力上限不足状况,仅使用 SwiftUI 原生手段无法实现非常复杂手势逻辑

2.6K20

解析SwiftUI布局细节(二)循环轮播+复杂布局

这篇我们还是说我们关于SwiftUI东西,再提一下Demo代码已经提交上Git了,目前Demo进度为一级页面基本上结束,地图点击大头针添加也刚处理完,代码有需要小伙伴可以去Git看看,项目地址...NavigationView + NavigationLink 界面跳转,在苹果给 SwiftUI 使用例子中就是这样写,当然我们在正常使用这样写也没啥问题,那我们界面跳转问题是什么呢?...如果你看了我们 Demo代码,你就知道我们是采用 TabView 嵌套 NavigationView 形式,在这样模式下似乎是存在问题, 在 TabView+NavigationView 你利用...具体我们Demo可以看看“”页面那个 List 代码,问题就在那里。要理解这点麻烦也给我说说,感谢!...3、再提一点关于上面说滚动视图,在UIKit我们可以用UICollectionView搞定一切,但是在SwiftUI没有这个控件,建议采用方式是 ScrollView + HStack + VStack

11.7K20

好看图表怎么画,看完这几个 API 你就会了

image 要是也能开发出这样数据可视化图表就好了,于是就立下了 flag。 终于今天要来兑现 flag 啦!...先来一波概念 在正式开始编码之前,我们先来熟悉一下 SwiftUI 提供一些绘制图形和图形特效 API 吧!...实现效果如下: image 绘制一个圆角矩形,这里需要用到 RoundedRectangle 这个结构体,在 SwiftUI 定义如下: @frozen public struct RoundedRectangle...根据手势滑动得到在屏幕上坐标,然后根据当前坐标去计算数据数组索引,从而得到数组值,部分代码如下: .gesture(DragGesture().onChanged({ value in...Path 是 SwiftUI 提供一个用于绘制 2D 图形结构体,称之为路径。

2.9K10

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

本文将解析 SwiftUI 两个由于未能贯彻响应式编程原则而导致严重错误,并提供相应解决方案。...原文发表在博客 肘子Swift记事本视图变化在前、状态变化在后在 SwiftUI ,某些可编程控件在执行一定操作时,会先更新视图,待视图变化完成后再修改与其对应状态。...为什么状态更新滞后会导致严重错误由于 SwiftUI 不透明性,想要分析这些问题成因并不容易。...幸运是,从 @KyleSwifter 解密 SwiftUI 背后 AttributeGraph 一文中找到了线索。...在我们遇到问题两个场景,应用程序都恰好使用了导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态。

560110

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

考虑到配套创作工具 CiderKit 在发展成熟过程也变得愈发复杂,再加上创建各种窗口和 UI 元素实际需求,决定尝试用用 SwiftUI。...但这会导致检查器值出现延迟,因此在地图编辑器交互过程(比如使用移动工具时)结果不准确,所以效果还是称不上完美。 但我觉得这可能只是个独立问题,并不能因此把 SwiftUI 一棒子打死。...但上图展示效果其实是在 AppKit 完成,因为SwiftUI 一直实现不了预期功能。大家应该注意到了,中间 SpriteKit 视图上有三个按钮(分别是 +、200% 和 -)。...这可以说是压死骆驼最后一根稻草了,决定放弃 SwiftUI,继续用 AppKit。 总    结 其实没能在项目中用到 SwiftUI,会让感觉有点遗憾。...但继续使用 AppKit 最大优点,就是没有任何延迟而且一切功能完全符合预期。当然,整个构建过程更繁琐,而且自动布局功能也不怎么好用。

4.8K20

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

本文将解析 SwiftUI 两个由于未能贯彻响应式编程原则而导致严重错误,并提供相应解决方案。...为什么状态更新滞后会导致严重错误 由于 SwiftUI 不透明性,想要分析这些问题成因并不容易。...幸运是,从 @KyleSwifter[4] 解密 SwiftUI 背后 AttributeGraph[5] 一文中找到了线索。...在我们遇到问题两个场景,应用程序都恰好使用了导航容器,并且通过特定操作,使 RunLoop 处于了适合 AG 打包更新状态。...随着版本提高,SwiftUI 功能也确实得到了相当程度增加。不过,即使在最新版本,在一些对 UIKit(AppKit)进行二次包装控件,仍有不少细节处理不到位问题。

24720

SwiftUI TextField 进阶 —— 事件、焦点、键盘

在 iOS 15 ,新增支持 ParseableFormatStyle 构造方法不提供该参数,因此对于使用新 Formatter TextField 需要使用其他手段来判断是否获得或失去焦点...当接受到SubmitTriggers值包含在 onSubmit 设置SubmitTriggers时,传递将终止。...asciiCapable 键盘 尽管苹果预置了不少键盘模式可以选择,不过在某些情况下仍无法满足使用需要。...在 SwiftUI 3.0 之前,我们必须在主视图上另外绘制或者使用SwiftUI 方式来解决问题,在 SwiftUI 3.0 ,由于添加了原生设置键盘辅助视图(下文具体介绍)功能,解决上述问题将不再困难...同其他类型 Toolbar 类似,SwiftUI 会干预内容排版。•无法对同一视图中多个 TextField 分别设定辅助视图在 ToolbarItem 无法使用稍微复杂一点判断语法。

13K10

打造可适配多平台 SwiftUI 应用

访问我博客 www.fatbobman.com 可以获得最新内容。开场白大家好,是肘子。今天要和大家交流主题是 —— 打造可适配多平台 SwiftUI 应用。...这样就失去了多窗口存在意义。图片为什么会出现这种情况呢?我们都知道 SwiftUI 是一个声明式框架。...由于 iPhone 只支持单窗口模式,通常我们不会太注意它存在,但在 iPadOS 以及 macOS 这些支持多窗口系统,则代表着,每次创建一个新窗口(在 macOS ,通过菜单新建来创建新窗口...这种通过 environmentObject 或 environment 来注入信息,只能在为当前场景创建视图树中被使用。...os(macOS) TabViewContainer() #else StackContainer() #endif}当做完这些改动后,您会发现,我们只能在设置更改电影信息窗口颜色模式和语言

3K80

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

开发者即使无法实现这样布局容器,也应对各种尺寸需求定义有清晰理解。在 SwiftUI 布局 —— 尺寸( 上 )[8] 一文,对建议尺寸几种模式都进行了介绍。...A:你最好选择是使用 ScrollView 和 ScrollViewReader,并在 onAppear 或新内容进来时滚动到最底部视图。建议尝试旋转滚动视图。...定制 ListQ:是否有办法以完全可定制方式使用 List ,这样就可以实现删除缩进、分隔线,甚至更改整个列表背景等操作? 目前,总是去找 LazyVStack 来代替。...软弃用Q:最近,注意到新 @ViewBuilder 函数在以前版本是不可用,弃用信息提示使用方法取代老方法,这是 SwiftUI API 设计缺陷还是错过了什么?...因为这些使用并不有害,我们希望开发者因为使用了新编译器版本而处理一堆警告。

14.7K30

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

苹果不仅带来了全新形态硬件产品,还推出了几个相当震撼新框架。本文将聊聊对本届 WWDC SwiftUI 5.0 和 SwiftData 初步印象。...这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...在不考虑兼容旧版本情况下,认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者在相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是目前整理一些有关 SwiftData 问题和注意事项( 原文发表在推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...,即使你打算开发 iOS 17+ 应用,目前也建议直接使用 SwiftData。

34110

WWDC 23 ,SwiftUI 5 和 SwiftData 初印象

苹果不仅带来了全新形态硬件产品,还推出了几个相当震撼新框架。本文将聊聊对本届 WWDC SwiftUI 5.0 和 SwiftData 初步印象。...这从根本上解决了当前影响 SwiftUI 应用( 过渡计算 )效率问题。让开发者可以更加自由来设计数据结构以及随心所欲注入数据源。 不过很遗憾,这项新特性只能在 SwiftUI 5 上实现。...在不考虑兼容旧版本情况下,认为 SwiftUI 5.0 升级可以打 95 分(满分 100 分),不过考虑到很多开发者在相当一段时间内还无法使用这些新功能,心情就会异常低落。...这是目前整理一些有关 SwiftData 问题和注意事项( 原文发表在推文中,没有进行更系统归纳): 尚不支持公共和共享数据云同步 在当前版本,通过其他上下文(ModelContext)创建数据并不会自动合并到视图上下文中...,即使你打算开发 iOS 17+ 应用,目前也建议直接使用 SwiftData。

1.1K20

打造可适配多平台 SwiftUI 应用

有关本次活动情况,可以参阅 在北京参加 SwiftUI 技术沙龙[1] 一文。...我们都知道 SwiftUI 是一个声明式框架。这不仅意味着开发者可以通过声明方式来构造视图,而且场景(对应着独立窗口)甚至整个 App 都是基于声明式代码来创建。...这种通过 environmentObject 或 environment 来注入信息,只能在为当前场景创建视图树中被使用。...将通过另一个简单应用来展示这种场景。 想很多读者此时都不会太赞同在每个场景创建一个独立 Store 实例这种做法。...(macOS) TabViewContainer() #else StackContainer() #endif } 当做完这些改动后,您会发现,我们只能在设置更改电影信息窗口颜色模式和语言

1.9K10

TCA - SwiftUI 救星?(一)

四年多前写过一篇关于使用单向数据流来架构 View Controller[2] 文章,因为 UIKit 并没有强制 view 刷新流程,所以包括绑定数据在内很多事情都需要自己动手,这为大规模使用造成了不小障碍...而自那时过了两年后, SwiftUI 发布才让这套机制有了更加合适舞台。在 SwiftUI 发布初期,也写过一本相关书籍[3],里面使用了一些类似的想法,但是很不完善。...SwiftUI 最基础状态管理模式,做到了 single source of truth:所有的 view 都是由状态导出,但是它同时也存在了很多不足。...我们真的需要一种架构,来让 SwiftUI 使用更加轻松一些。 从 Elm 获得启示 估摸着前端开发圈子一年能大约能诞生 500 多种架构[8]。...不出意外,当 WithViewStore 接受闭包满足 View 协议时,它本身也将满足 View,这也是为什么我们能在 CounterView body 直接用它来构建一个 View 原因。

3.1K30

构建稳定预览视图 —— SwiftUI 预览工作原理

由于预览崩溃次数和场景增加,一些开发者已经预览为 SwiftUI 缺点之一,并对其产生了排斥感。 预览功能真的如此不堪吗?我们当前使用预览方式真的妥当吗?...将通过两篇文章来分享对预览功能认知和理解,并探讨如何构建稳定预览。本文将首先剖析预览功能实现机制,让开发者了解哪些情况是预览必然无法处理。...可惜是,Toomas Vahter在文章没有告诉读者崩溃原因。借用这段代码来与大家一起探究预览功能是如何工作。...这就解释了这段代码为什么在模拟器和真机可以运行,但会导致预览崩溃。因为预览是以衍生代码作为入口,只依赖有限导入信息对衍生代码进行编译,因此可能会出现因信息不完整而无法编译情况。...在下一篇文章,我们将从开发者角度审视预览功能:它设计目的、最适宜使用场景以及如何构建稳定高效预览。

42210

SwiftUI 与 Core Data —— 数据获取

类 Redux 框架通常都建议开发者将整个 app 状态合成到一个单一结构实例( State ,符合 Equatable 协议 ),视图通过观察状态变化( 有些框架支持切片式观察以改善性能 )...也做了不少尝试,但最终发现似乎 FetchRequest 仍是当前 SwiftUI 最优解。...尽管在实践,如果能在确保访问托管对象非线程安全属性前提下,在非创建托管对象线程持有托管对象并不会出现崩溃情况,但出于谨慎考虑,最终还是放弃了这种方式。...在 SwiftUI ,ForEach 会根据数据标识( Identifier )自动处理视图添加、删除等操作,因此,当在 SwiftUI使用 NSFetchedResultsController...这意味着,尽管我们只能在 update 方法更改数据,但必须要想办法错开该更新周期。

4.6K30

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

为什么会使那么惊喜? 我们都知道前端工作离不开适配,虽然之前Apple Xib一些设计适配起来很方便了。但是在pad或者tv上还是要写不同代码去做在不同平台运行。...SwiftUI是什么 ---- SwiftUI是一种创新、非常简单方法,可以利用Swift强大功能在所有苹果平台上构建用户界面。使用一组工具和api为任何苹果设备构建用户界面。...自动支持动态类型、暗模式、本地化和可访问性意味着您第一行SwiftUI代码已经是您编写过最强大UI代码。 ?...SwiftUI语法是什么样呢 ---- SwiftUI使用声明性语法,因此您可以简单地声明用户界面应该做什么。例如,您可以编写一个包含文本字段项列表,然后描述每个字段对齐方式、字体和颜色。...SwiftUI 工具是什么样呢 ---- Xcode 11包含了直观新设计工具,使用SwiftUI构建界面变得像拖放一样简单。

2.3K30

为什么 SwiftUI 修饰符顺序很重要

每当我们将修饰符应用于 SwiftUI 视图时,我们实际上都会创建一个,应用了更改新视图 —— 我们不仅仅是修改现有的视图。...我们将在下一章查看为什么会发生这种情况,但是首先,想看看这种行为实际含义。...如果思考一下修饰符工作原理,您就可以了解为什么会如此:每个修饰符都会创建一个,应用了该修饰符新结构体,而不是在视图上设置属性。 您可以通过查询视图主体类型来窥视 SwiftUI 底层。...当然,这不是 SwiftUI 实际上工作方式,因为如果这样做,那将是性能上噩梦,但这是学习时候可以使用一种简洁思维捷径。...使用修饰符一个重要副作用是,我们可以多次应用相同效果:每个修饰符都会简单地添加到以前内容

2.3K20

SwiftUI使用UIKit视图

例如,UIKit我们将一个代理对象附加到Text field视图上,当用户输入时,当用户按下return键时,该代理对象对应方法将被调用。...在协调器,我们可以通过双向绑定(Binding),通知中心(notificationCenter)或其他例如Redux模式单项数据流等方式,将UIKit视图内部状态报告给SwiftUI框架或其他需要模块...对于一些实现复杂功能UIKit模组,如果完全按照SwiftUI模式将其业务逻辑彻底剥离是非常困难。因此将无法剥离业务逻辑实现代码放入协调器,靠近代理方法,便于相互之间协调和管理。...作为SwiftUI开发者,推荐大家最好购买一份javier开发A Companion for SwiftUI。该app提供了远比官方丰富、清晰SwiftUI API指南。...在多数情况下,两种方式都能取得满意效果。不过用原生方法创建searchbar在构图上更灵活,同时支持使用LocalizedString作为placeholder。个人会更倾向于使用组合方案。

8.1K20
领券