iOS 评论弹窗手势问题

基本原理

给slidePopupView添加一个滑动手势
并设置代理
我们在 shouldReceiveTouch 代理方法中 通过 touch.view 判断 是否是滑动tableView, 如果
touch.view 是tableView , isDragScrollView 就是YES, 否则就是NO
并且要 shouldRecognizeSimultaneouslyWithGestureRecognizer 方法中 gestureRecognizer == self.panGesture
[otherGestureRecognizer isEqual:self.scrollView.panGestureRecognizer] 的情况下返回YES,因为这个时候
我们手在滑动tableView的时候,也会响应 slidePopupView 的 手势方法,这样的话,我们在向下滑动tableView 滑动到顶部的时候,
可以直接无缝衔接的修改slidePopupView 的frame, 这样达到连续滑动的效果,否则我们滑动tableView 到顶部之后,九不能带动slidePopupView
滑动了,当然这个衔接需要我们自己处理 ,后面会讲到
我们在滑动手势的响应方法中 handlePanGesture ,如果 isDragScrollView = NO,就直接修改
slidePopupView的frame, 跟着pangesture的偏移量移动 如果
isDragScrollView = YES, 这个时候其实tableView的滑动不需要我们处理,就是处理正在滑动tableView的时候需要滑动slidePopupView frame 情况
其实有两个临界情况,一个是比较容易出现的情况就是我们向下滑动 评论视图滚动到顶部并继续向下滑动,这个时候,我们需要处理,让tableview不能滚动,并且去修改
slidePopupView的frame 让整个弹窗向下滚动 , 另外一种情况就是比较不同意出现的,但是我们为了代码健壮要有这种逻辑, 我们向下滑动弹窗头部(不在tableView)范围内,使评论弹窗向下滑动适当的偏移量 , 然后我们将手的触摸点放在tableview范围内,向上滑动,这个时候,需要我们修改slidePopupView的frame达到滑动的效果。
总的来说,就是我们先判断,触摸点是否是在tableview中,如果不的话,是容易处理的,直接修改slidePopupView 的frame就行了,如果是在tableview范围内的,
就要判断如何处理滑动了,因为,系统默认情况下,是只滑动tableView的,我们需要处理的就是触摸点在tableview 范围内的时候,不滑动tableView ,而是要滑动
slidePopupView.其实就两种情况
一种translationOffset < 0 并且 slidePopupView.top 没有到达最高点的时候,需要我们滚动向上slidePopupView,
一中是 translationOffset > 0 并且 tableView.offset = 0的时候,需要我们向下滚动 slidePopupView

注意事项

注意这个滑动手势,不是tableView本身自带的滑动手势,
tabelView本身的滑动时系统处理的,我们这里要处理的是我们添加到slidePopupView 的滑动手势,但是触摸点在tableView范围内的情况。这个时候,要分情况进行处理
我们通过translationInView 获取到滑动手势的偏移量, 如果 translationOffset < 0,则说明
是在向上滚动, 这个情况下又分两种情况,我们 slidePopupView 有一个最大高度,则slidePopupView 距离
屏幕顶部有一个最小距离, 如果slidePopupView 的top 大于最小距离,则 向上滑动的时候,tabelView 是不动的,
并且要将tableView的偏移量置为0,因为只有在popupslideView到达最大高度的时候在允许tableview向上滚动
并且设置 self.scrollView.panGestureRecognizer.enabled = NO, 避免手势向上滑动的时候,两层视图同时滚动,
并且要修改 isDragScrollView = NO 并执行修改 popupslideView frame的方方法updateContentFrame, 如果 slidePopupViewtop =slidePopupView 到顶部的最小距离了,我们就不做处理,让系统自动处理滚动tableView

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51356.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity发布安卓解决报错: You will no longer be able to disable R8

Unity发布安卓解决报错&#xff1a; You will no longer be able to disable R8 问题描述1 版本&#xff1a;2 问题描述&#xff1a;3 分析&#xff1a; 解决方案1 升级工程2 选择安卓版本12L3 直接打包 问题描述 1 版本&#xff1a; unity 2021 2 问题描述&#xff1a; da…

go run command

文章目录 1.简介2.格式3.示例4.注意事项5.常见用途参考文献 1.简介 编译并运行 Go 程序。 2.格式 go run [build flags] [-exec xprog] package [arguments...]run 编译并运行指定的 main 包。 通常&#xff0c;main 包被指定为来自单个目录的 .go 源文件列表&#xff0c;但…

echarts实现在市级行政区点击县级行政区,显示单个县级行政区地图数据

因需兼容ie&#xff0c;此处所有变量声明都用var。如无需支持&#xff0c;可另做let修改。 这里以常州市为例,我们可以去阿里云提供的地理工具去截取地图json数据DataV.GeoAtlas地理小工具系列 点击所选区域&#xff0c;右侧会对应显示json数据&#xff0c;再次点击右侧红框内…

MySQL 索引相关基本概念

文章目录 前言一. B Tree 索引1. 概念2. 聚集索引/聚簇索引3. 辅助索引/二级索引4. 回表5. 联合索引/复合索引6. 覆盖索引 二. 哈希索引三. 全文索引 前言 InnoDB存储引擎支持以下几种常见索引&#xff1a;BTree索引&#xff0c;哈希索引&#xff0c;全文索引 一. B Tree 索引…

java如何实现接口之间的继承

java如果要实现接口之间的继承需要用到语句 interface 接口1 extends 接口2&#xff0c;接口3 一个接口可以继承多个接口 示例代码如下 interface Animal03{public String name"牧羊犬";public void info(); } interface Color{public void black(); } interface…

2024巴黎奥运会竟然用AI做这些?

人工智能将成为 2024 年巴黎奥运会的焦点&#xff0c;组织者于四月制定了《奥运会人工智能议程》&#xff0c;这是一个涵盖人工智能对奥运会未来影响的框架。 该议程体现了国际奥委会及其主要合作伙伴的承诺&#xff0c;确保在奥运会上使用人工智能来促进团结、提高可持续性并加…

从零到一使用 Ollama、Dify 和 Docker 构建 Llama 3.1 模型服务

本篇文章聊聊&#xff0c;如何使用 Ollama、Dify 和 Docker 来完成本地 Llama 3.1 模型服务的搭建。 如果你需要将 Ollama 官方不支持的模型运行起来&#xff0c;或者将新版本 llama.cpp 转换的模型运行起来&#xff0c;并且想更轻松的使用 Dify 构建 AI 应用&#xff0c;那么…

网络传输层——UDP与TCP

前言&#xff1a; 1.国际网络体系结构&#xff1a; OSI模型: open system interconnect 理论模型 1977 国际标准化组织 各种不同体系结构的计算机能在世界范围内互联成网。 应用层:要传输的数据信息&#xff0c;如文件传输&#xff0c;电子邮件等…

数据结构:队列(顺序存储和链式存储)

文章目录 1. 队列的概念和结构2. 队列的链式存储实现2.1 初始化2.2 判断队列是否为空2.3 入队列2.4 出队列2.5 取队头数据2.6 取队尾数据2.7 队列有效数据的个数2.8 打印队列数据2.9 销毁2.10 源代码 3. 队列的顺序存储实现(循环队列)3.1 初始化3.2 判断队列是否为空3.3 判断队…

【数据结构之C语言实现动态顺序表】

引 入: 在讲顺序表之前得先了解线性表是什么&#xff1f; 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表&#xff0c;链表&#xff0c;栈&#xff0c;队列&#xff0c;字符串…… 线性表…

Meta 发布地表最大、最强大模型 Llama 3.1

最近这一两周看到不少互联网公司都已经开始秋招提前批了。不同以往的是&#xff0c;当前职场环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;HC 在变少&#xff0c;岗位要求还更高了。 最近&#xff0c;我们又陆续整理了很多大厂的面试题&#xff0c;帮助一些球友解…

【iOS】暑期第一周——ZARA app仿写

目录 前言无限轮播图分栏控件和滚动视图自定义cell遇到的问题调整图标大小单元格附件视图设置 总结 前言 暑假学习的第一周任务是对ZARA app进行仿写&#xff0c;充分运用之前学习的Objective-C语言和UI控件。我在编写demo的过程中遇到了一些问题&#xff0c;特写该博客作为学习…

【Go】探索 Go 语言的内建函数 make

山水间歌声回荡 回荡思念的滚烫 去年的家书两行 读来又热了眼眶 云水边静沐暖阳 烟波里久违的故乡 别来无恙 你在心上 &#x1f3b5; 张靓颖/张杰《燕归巢》 在 Go 语言中&#xff0c;make 是一个非常强大的内建函数&#xff0c;用于创建和初始化特定类型…

LLM与搜索推荐

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…

VScode连接服务器免密登录

1、生成 SSH 密钥对 打开终端并输入以下命令生成 SSH 密钥对&#xff1a; 直接搜索 cmd&#xff0c;然后输入&#xff1a; ssh-keygen -t rsa -b 4096 一直回车就好了 这时公钥存储在/Users/你的用户名/.ssh/id_rsa.pub文件里&#xff0c;私钥存储在/Users/你的用户名/.ss…

B Tree和B+ Tree的区别

1. 叶子节点的存储 2. 查询效率 3. 范围查询 4. 内存使用 5. 插入和删除 6. 应用场景 总结 B树&#xff08;B-Tree&#xff09;和B树&#xff08;B Tree&#xff09;都是广泛应用于数据库和文件系统中的自平衡树数据结 构&#xff0c;主要用于存储和检索大量数据。虽然它…

简单的数据结构:栈

1.栈的基本概念 1.1栈的定义 栈是一种线性表&#xff0c;只能在一端进行数据的插入或删除&#xff0c;可以用数组或链表来实现&#xff0c;这里以数组为例进行说明 栈顶 &#xff1a;数据出入的那一端&#xff0c;通常用Top表示 栈底 :相对于栈顶的另一端&#xff0c;也是固…

Unity 动画曲线(Animation Curves):创造流畅动画的关键

在Unity中&#xff0c;动画曲线&#xff08;Animation Curves&#xff09;是一种强大的工具&#xff0c;用于在动画和游戏开发中创建平滑且自然的过渡效果。通过动画曲线&#xff0c;开发者可以轻松地控制动画参数随时间的变化&#xff0c;实现复杂的动画效果。本文将探讨Unity…

gitee R包安装

要安装giteeR包&#xff0c;你可以使用以下步骤&#xff1a; 安装remotes包&#xff1a;giteeR包不是CRAN上的标准包&#xff0c;因此你需要使用remotes包从Git仓库安装。 install.packages("remotes")从Gitee安装giteeR包&#xff1a; remotes::install_git("h…

黑马头条vue2.0项目实战(一)——项目初始化

1. 图标素材&#xff08;iconfont简介&#xff09; 制作字体图标的工具有很多&#xff0c;推荐使用&#xff1a;iconfont-阿里巴巴矢量图标库。 注册账户 创建项目 可以根据项目自定义 class 前缀 上传图标到项目 生成链接&#xff0c;复制 css 代码&#xff0c;在项目中使用…