当前位置: 首页 > news >正文

iOS开发-处理UIControl触摸事件TrackingWithEvent

IOS BUG记录 之 处理UIControl的点击事件。

UIControl的触摸事件的方法是beginTrackingWithTouch:withEvent:,continueTrackingWithTouch:withEvent:,endTrackingWithTouch:withEvent:,cancelTrackingWithEvent:

##下面简单的介绍一下

  • beginTrackingWithTouch:withEvent:是控件被拖动,让其进入高亮状态;
  • endTrackingWithTouch:withEvent:结束触摸,取消高亮,恢复状态。
  • continueTrackingWithTouch:withEvent:手指移动过程。
  • cancelTrackingWithEvent: 取消触摸,取消高亮,恢复状态。

今天遇到一个问题BUG,当点击时直接移开手指时要求被点击的控件变小后恢复状态;还需要长时间触摸在该控件上,手指不移开的时候,控件一直保持在变小的状态,一段时间移开手指时控件恢复正常的状态,以便响应用户的操作。

使用的控件继承UIControl

##第一种情况:当点击时直接移开手指时要求被点击的控件变小后恢复状态;

点击触发事件问题,UIControlEventTouchUpInside

        [view addTarget:self action:@selector(viewClicked:) forControlEvents:UIControlEventTouchUpInside];

点击事件的方法

        - (void) viewClicked:(id)sender {DFBaseView *view = (DFBaseView *)sender;view.userInteractionEnabled = NO;__weak typeof(view) weakView = view;__weak typeof(self) weakSelf = self;[view didSelectedAnimation:^{__strong typeof(weakSelf) strongSelf = weakSelf;__weak typeof(weakView) strongView = weakView;//todo somethingstrongView.userInteractionEnabled = YES;}];
}

点击的时候的动画处理,先变小后恢复

        - (void)didSelectedAnimation:(void (^) (void))block {[UIView animateWithDuration:0.15 animations:^{self.layer.transform = CATransform3DMakeScale(kTransformScale, kTransformScale, 1);} completion:^(BOOL finished) {[UIView animateWithDuration:0.15 animations:^{self.layer.transform = CATransform3DMakeScale(1.0, 1.0, 1);} completion:^(BOOL finished) {self.animationHighlighted = NO;block();}];}];
}

从上面的代码,我们可以看出,是UIControl的点击事件,动画结束后回调block,之后//todo something 如push跳转等操作。

##第二种情况:长时间触摸在该控件上,手指不移开的时候,控件一直保持在变小的状态,一段时间移开手指时控件恢复正常的状态。

这个时候上面的代码就满足不了了,需要实现如下的几个方法

  • (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(nullable UIEvent *)event;
  • (void)endTrackingWithTouch:(nullable UITouch *)touch withEvent:(nullable UIEvent *)event; // touch is sometimes nil if cancelTracking calls through to this.
  • (void)cancelTrackingWithEvent:(nullable UIEvent *)event; // event may be nil if cancelled for non-event reasons, e.g. removed from window

具体实现

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {[UIView animateWithDuration:0.15 animations:^{self.layer.transform = CATransform3DMakeScale(kTransformScale, kTransformScale, 1);} completion:^(BOOL finished) {}];return [super beginTrackingWithTouch:touch withEvent:event];
}- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {return [super continueTrackingWithTouch:touch withEvent:event];
}- (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {[super endTrackingWithTouch:touch withEvent:event];[UIView animateWithDuration:0.15 animations:^{self.layer.transform = CATransform3DMakeScale(1.0, 1.0, 1);} completion:^(BOOL finished) {}];
}- (void)cancelTrackingWithEvent:(UIEvent *)event {[super cancelTrackingWithEvent:event];[UIView animateWithDuration:0.15 animations:^{self.layer.transform = CATransform3DMakeScale(1.0, 1.0, 1);} completion:^(BOOL finished) {}];
}

学习记录,每天不停进步。

相关文章:

iOS开发-处理UIControl触摸事件TrackingWithEvent

IOS BUG记录 之 处理UIControl的点击事件。 UIControl的触摸事件的方法是beginTrackingWithTouch:withEvent:,continueTrackingWithTouch:withEvent:,endTrackingWithTouch:withEvent:,cancelTrackingWithEvent: ##下面简单的介绍一下 beg…...

学无止境·运维高阶⑤(LVS-DR 群集 配置Nginx负载均衡)

LVS-DR 群集 && 配置Nginx负载均衡 一、LVS-DR 群集1、相关配置环境2、在RS上配置并启动脚本2.1相关脚本2.2 启动脚本,另一台RS同样步骤 3、LVS-DR模式配置脚本4、测试 二、Nginx负载均衡1、安装Nginx并关闭相应设置2、向主机 node2,node3 写入内…...

badger的mainfest文件解读

1. mainfest文件的作用 mainfest文件是记录lsm tree中的各层tables表的创建删除记录的一个日志文件,主要的作用是badger数据库重启后,重新恢复内存中的各层tables表 2、内容结构 先是8个字节的魔数,魔数的结构如下 ----------------------…...

java导出excel浏览器下载,单线程VS多线程

java导出excel浏览器下载,单线程VS多线程 package com.mengyang.transactional.other.excelxssf; import com.mengyang.transactional.other.myselfExcel.ExcelUtils; import com.mengyang.transactional.pojo.ZhongXinDTO; import org.apache.poi.ss.usermodel.*…...

【rust/egui】(二)看看template的main函数:日志输出以及eframe run_native

说在前面 rust新手,egui没啥找到啥教程,这里自己记录下学习过程环境:windows11 22H2rust版本:rustc 1.71.1egui版本:0.22.0eframe版本:0.22.0上一篇:这里 开始 首先让我们看看main.rs中有些什么…...

Eigen在QT中的配置

Eigen简介 Eigen支持包括固定大小、任意大小的所有矩阵操作,甚至是稀疏矩阵;支持所有标准的数值类型,并且可以扩展为自定义的数值类型;支持多种矩阵分解及其几何特征的求解;它不支持的模块生态系统提供了许多专门的功能…...

微服务04-elasticsearch

1、es概念 1.1 文档和字段 elasticsearch是面向**文档(Document)**存储的,可以是数据库中的一条商品数据,一个订单信息。文档数据会被序列化为json格式后存储在elasticsearch中: 而Json文档中往往包含很多的字段(Field),类似于数据库中的列。 1.2 索引和映射 索引(…...

uniapp 微信小程序 订阅消息

第一步&#xff0c;需要先去小程序官方挑选一下订阅模板拿到模板id 订阅按钮在头部导航上&#xff0c;所以 <u-navbar :bgColor"bgColor"><view class"u-nav-slot" slot"left" click"goSubscribe"><image :src"g…...

JDK8日期时间工具类

此文章为笔记&#xff0c;为阅读其他文章的感受、补充、记录、练习、汇总&#xff0c;非原创&#xff0c;感谢每个知识分享者。 文章目录 1. 旧版日期时间的问题2. 新日期时间API介绍3. 日期时间的常见操作4. 日期时间的修改和比较5. 格式化和解析操作6. Instant类7. 计算日期…...

智汇云舟入选IDC《中国智慧城市数字孪生技术评估,2023》报告

8月7日&#xff0c;国际数据公司&#xff08;IDC&#xff09;发布了《中国智慧城市数字孪生技术评估&#xff0c;2023》报告。智汇云舟凭借在数字孪生领域的创新技术与产品&#xff0c;入选《2023中国数字孪生城市技术提供商图谱》。 报告通过公开征集的形式进行申报&am…...

《Zookeeper》源码分析(九)之选举通信网络

在上一篇文章中讲到QuorumCnxManager&#xff0c;它负责zookeeper服务器在选举期间最底层的网络通信&#xff0c;整个网络涉及到的类如下&#xff1a; 整个网络建立的过程如下&#xff1a; 选举前创建好QuorumCnxManager实例&#xff0c;并在QuorumCnxManager构造函数中创建好…...

JVM——栈和堆概述,以及有什么区别?

方法栈 方法栈并不是某一个 JVM 的内存空间&#xff0c;而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内&#xff0c;T1()调用T2()&#xff1a; T1()先开始&#xff0c;T2()后开始&#xff1b;T2()先结束&#xff0c;T1()后结束。 堆和栈概述 从英文单词角度来…...

恒盛策略:沪指冲高回落跌0.26%,酿酒、汽车等板块走弱,燃气股拉升

10日早盘&#xff0c;两市股指盘中冲高回落&#xff0c;半日成交约4200亿元&#xff0c;北向资金净卖出超20亿元。 到午间收盘&#xff0c;沪指跌0.26%报3235.9点&#xff0c;深成指跌0.54%&#xff0c;创业板指跌0.28%&#xff1b;两市算计成交4202亿元&#xff0c;北向资金净…...

Mongodb 常用操作

// 查询 user_id 是否存在 db.getCollection("t_mongo_user").find({"user_id" : { $exists: true }}) // 查询 user_id 10 的记录 db.getCollection("t_mongo_user").find({"user_id" : 10}) // 排序 -1&#xff0c;按照 _id 倒…...

【python】-【】

文章目录 转义字符和原字符二进制与字符编码标识符和保留字变量的定义和使用变量字符串列表for 一、print会输出①数字②字符串&#xff08;必须加引号&#xff09;③含有运算符的表达式&#xff08;例如 31 其中3&#xff0c;1是操作数&#xff0c;是运算符&#xff09;&#…...

基于Elman神经网络的电力负荷预测

1 案例背景 1.1 Elman神经网络概述 根据神经网络运行过程中的信息流向,可将神经网络可分为前馈式和反馈式两种基本类型。前馈式网络通过引入隐藏层以及非线性转移函数可以实现复杂的非线性映射功能。但前馈式网络的输出仅由当前输人和权矩阵决定,而与网络先前的输出结果无关。…...

LeetCode 0088. 合并两个有序数组

【LetMeFly】88.合并两个有序数组&#xff1a;O(m 1) O(1)的做法 力扣题目链接&#xff1a;https://leetcode.cn/problems/merge-sorted-array/ 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2…...

定义行业新标准?谷歌:折叠屏手机可承受20万次折叠

根据Patreon账户上的消息&#xff0c;Android专家Mishaal Rahman透露&#xff0c;谷歌计划推出新的硬件质量标准&#xff0c;以满足可折叠手机市场的需求。Android原始设备制造商&#xff08;OEM&#xff09;将需要完成谷歌提供的问卷调查&#xff0c;并提交样品设备进行严格审…...

在vscode中配置C/C++环境GCC on Linux

https://code.visualstudio.com/docs/cpp/config-linux 官方文档 准备工作 为了能够在vs code中编译运行C/C程序&#xff0c;需要下载&#xff1a; Visual Studio Code C扩展插件&#xff0c;cuda&#xff0c;&#xff0c;&#xff0c; 对于该扩展插件&#xff0c;打开vs c…...

windows执行完LoadLibrary()后,可以删除源动态库文件,函数不会锁库文件

windows执行完LoadLibrary()后&#xff0c;可以删除源动态库文件&#xff0c;函数不会锁库文件。 #include <iostream> #include <Windows.h>int main() {char path[MAX_PATH]{};GetCurrentDirectoryA(sizeof(path), path);HMODULE lib LoadLibraryA("testd…...

Alibaba DASD-4B Thinking 对话工具在时序预测中的应用:结合LSTM模型的分析与报告生成

Alibaba DASD-4B Thinking 对话工具在时序预测中的应用&#xff1a;结合LSTM模型的分析与报告生成 1. 引言 想象一下这个场景&#xff1a;你的团队刚刚用LSTM模型跑完了下个季度的销量预测&#xff0c;屏幕上那条起伏的曲线清晰地告诉你&#xff0c;三月份会有一个销售高峰&a…...

张雪机车夺冠,HRPP专利池借势而上:助力国产人形机器人从“出货量冠军”到“技术冠军”

张雪机车夺冠&#xff0c;HRPP专利池借势而上&#xff1a;助力国产人形机器人从“出货量冠军”到“技术冠军”2026年3月&#xff0c;葡萄牙波尔蒂芒赛道&#xff0c;WSBK世界超级摩托车锦标赛葡萄牙站&#xff0c;张雪机车820RR-RS赛车连续两回合夺冠。这是中国摩托车品牌在全球…...

番茄小说下载器终极指南:三步实现离线阅读自由

番茄小说下载器终极指南&#xff1a;三步实现离线阅读自由 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 番茄小说下载器是一款基于Rust开发的开源工具&#xff0c;能够将在线…...

深入解析SyncE:以太网频率同步的关键技术与应用

1. SyncE技术初探&#xff1a;以太网频率同步的基石 想象一下城市交通信号灯系统&#xff0c;如果每个路口的红绿灯各自为政、节奏混乱&#xff0c;结果必然是交通瘫痪。SyncE&#xff08;同步以太网&#xff09;技术解决的正是类似问题——它让以太网设备像精准协调的交通信号…...

LangChain教程-、Langchain基础严

简介 AI Agent 不仅仅是一个能聊天的机器人&#xff08;如普通的 ChatGPT&#xff09;&#xff0c;而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统&#xff0c;更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料&#xff0c;agent的…...

AI万能分类器5分钟上手:零代码搭建智能客服分类系统

AI万能分类器5分钟上手&#xff1a;零代码搭建智能客服分类系统 1. 引言&#xff1a;当客服遇到海量工单&#xff0c;如何快速分类&#xff1f; 想象一下&#xff0c;你是一家电商公司的客服主管。每天&#xff0c;成百上千条用户咨询像潮水一样涌进后台&#xff1a;“我的快…...

云原生 DevOps 实践与优化:构建高效的持续交付系统

云原生 DevOps 实践与优化&#xff1a;构建高效的持续交付系统 前言 作为一个在数据深渊里捞了十几年 Bug 的女码农&#xff0c;我深知云原生 DevOps 在现代企业中的重要性。随着云技术的快速发展&#xff0c;传统的 DevOps 实践已经难以满足云原生环境的需求。今天&#xff0c…...

Granite TimeSeries FlowState R1 在JavaScript前端的数据可视化应用

Granite TimeSeries FlowState R1 在JavaScript前端的数据可视化应用 1. 引言 如果你正在开发一个需要预测未来趋势的业务系统&#xff0c;比如销量预测、服务器负载监控或者用户增长分析&#xff0c;那么你很可能遇到过这样的问题&#xff1a;后端模型预测得挺准&#xff0c…...

深度解析ComfyUI-Manager:如何掌握节点安装进度监控与队列管理

深度解析ComfyUI-Manager&#xff1a;如何掌握节点安装进度监控与队列管理 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable vario…...

深入计算机网络:理解OFA-Image-Caption模型API调用的HTTP协议与网络延迟

深入计算机网络&#xff1a;理解OFA-Image-Caption模型API调用的HTTP协议与网络延迟 你是不是也遇到过这种情况&#xff1f;调用一个图像描述&#xff08;Image Captioning&#xff09;模型的API&#xff0c;比如OFA模型&#xff0c;明明服务器处理图片只需要几百毫秒&#xf…...