SwiftUI—如何使一个视图同时支持多种的手势

简介: SwiftUI—如何使一个视图同时支持多种的手势

您可以使一个视图同时支持多种手势,例如给一个视图同时添加拖动手势和旋转手势。本节课演示如何给一个视图同时添加长按手势和拖动手势。


示例代码:


struct ContentView : View {
    @State var offset: CGSize = .zero //表示视图被拖动的距离
    @GestureState var isLongPressed = false
    var body: some View {
        let longPressGesture = LongPressGesture()
            .updating($isLongPressed) { value, state, transcation in
                print(value, state, transcation)
                state = value
        }
        .onEnded { (value) in
            print(value)
        }
        let dragGesture = DragGesture()
            .onChanged { (value) in //响应拖动手势的状态变化
                print(value.startLocation, value.location, value.translation)
                self.offset = value.translation
        }
        .onEnded { (value) in
            if(abs(value.translation.width) >= 40 || abs(value.translation.height - (-260)) >= 40){
                self.offset = .zero
            }
            else{
                self.offset = CGSize(width: 0, height: -260)
            }
        }
        .simultaneously(with: longPressGesture)
        return VStack{
            Circle()
                .fill(Color.black)
                .opacity(0.1)
                .frame(width: 200, height: 200)
                .offset(CGSize(width: 0, height: -50))
            Circle()
                .fill(Color.orange)
                .frame(width: 200, height: 200)
                .offset(offset)
                .gesture(dragGesture)
                .scaleEffect(isLongPressed ? 1.4 : 1)
                .animation(.spring())
        }
    }
}


2466108-1e1078f887b41ba6.gif


目录
相关文章
|
Android开发 Kotlin JavaScript
Compose 为什么可以跨平台?
Compose 为什么可以跨平台?
653 0
Compose 为什么可以跨平台?
|
JSON 自然语言处理 编译器
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
前言包大小是衡量APP性能的一项重要指标,它直接影响用户的下载点击率(包太大不想下)、下载安装成功率(下载慢不用了)、APP卸载率(太占空间先删掉)。包大小的计算逻辑很简单,它是各种类型的文件占用磁盘大小相加。APP瘦身的技术却很复杂,代码文件的复杂度和编译器策略决定了可执行文件的大小,业务功能和工程架构决定了代码文件的复杂度。iOS APP瘦身,需要掌握的技能有XCode构建技术、LLVM编译器
4429 0
Alibaba.com瘦包40MB——业界最全的iOS包大小技术总结
|
Kubernetes 安全 Linux
|
Cloud Native 关系型数据库 Serverless
基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践
本文带大家了解一下如何使用阿里云Serverless计算产品函数计算构建生产级别的LLM Chat应用。该最佳实践会指导大家基于开源WebChat组件LobeChat和阿里云函数计算(FC)构建企业生产级别LLM Chat应用。实现同一个WebChat中既可以支持自定义的Agent,也支持基于Ollama部署的开源模型场景。
1588 116
|
9月前
|
存储 人工智能 自然语言处理
基于AI的学生视频自动评审系统:技术架构与实现
基于AI的自动化面审系统,旨在提高学生视频作品评审效率,减轻教师负担,确保评审客观公正。系统通过视频上传、处理、分析及反馈生成等模块,运用NLP、语音识别等技术,从语法、流利度、发音三方面智能评估,提供个性化反馈,保障数据安全与隐私。
492 6
|
存储 Swift
大师学SwiftUI第18章Part3 - 自定义视频播放器
录制和播放视频对用户来说和拍照、显示图片一样重要。和图片一样,Apple框架中内置了播放视频和创建自定义播放器的工具。
521 0
|
图形学
Flutter笔记:Matrix4矩阵变换与案例
Flutter笔记:Matrix4矩阵变换与案例
699 0
|
缓存 开发工具 git
Git Cloning into :error: RPC failed
Git Cloning into :error: RPC failed
218 0
|
小程序 JavaScript
微信小程序——计算器案例
微信小程序——计算器案例
863 0
微信小程序——计算器案例
|
JavaScript 前端开发 安全
深入探究iframe:网页嵌入的魔法盒子(上)
深入探究iframe:网页嵌入的魔法盒子(上)