IOS BUG 处理UIControl触摸事件TrackingWithEvent

news/2024/11/16 17:52:40/

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) {}];
}

本文作为学习记录,以便之后查阅。谢谢。


http://www.ppmy.cn/news/788603.html

相关文章

rufus 制作U盘启动工具

之前使用ultraiso在服务器上安装系统,发现很多ubuntu版本安装都提示There was a problem reading data from the CD-ROM. Please make sure it is in the drive. If retrying does not work, you should check the integrity of your CD-ROM.,其实是ultr…

UltraISO+U盘制作启动盘安装各种系统

现在装系统的方式多种多样,软媒、小白一键重装等等,不过我还是喜欢用U盘来做启动盘,怎么说呢,简单粗暴,有安全感。由于本人使用过的操作系统除了win10就是win7,所以就介绍一下在这两个系统上做启动盘到启动…

rufus(u盘引导盘制作工具) v3.5.1497

点击下载来源:rufus(u盘引导盘制作工具) v3.5.1497 rufus是一款小巧实用、开源免费的系统u盘制作软件,当你需要安装系统又没有带装有系统的U盘或者刻录光盘的时候,这款软件就该上场了,可以帮你安装Windows系统和linux系统哦。该软…

官方正版制作Win10U盘启动攻略

1.需要用到的工具 硬件:8G及以上容量的U盘。 Windows系统:Windows10操作系统镜像点击官网下载 2.下载工具并打开 3.等待,接受条款 4.为另一台电脑创建安装介质 5.选择语言、体系结构和版本 这里选择的是windows10 家庭中文版 6.选择要使…

教程丨利用微软官方工具制作U盘安装Win10系统

一、制作Win10安装U盘 1、登录网站 https://www.microsoft.com/zh-cn/software-download/windows10 下载 “MediaCreationTool”工具,这里我们直接点击“立即下载工具”即可。 2、安装并运行“MediaCreationTool”工具,从弹出的“Windows10安装程序”…

强大的U盘启动盘制作工具Rufus

先谈谈缘由吧。最近学习了网络攻防的相关知识,我想在电脑中安装Kali2.0。本以为是非常简单的一件事,结果,呵呵。迷信UltroISO的强大,结果制作出来的U盘根本无法启动。多方探寻之下,我最终找到这款免费的、开源的并且更…

iview Input 只能输入数字,并且不能以0开头

话不多说&#xff0c;上代码&#xff1a; <FormItem class"modal-form-item" label"座号" prop"seat_num" v-if"form.list.type ! add"><Input class"form-item-input"type"number"v-model.trim"…

Nginx代理

Nginx服务器的反向代理服务是其最常用的重要功能。 代理 在Java设计模式中&#xff0c;代理模式是这样定义的&#xff1a;给某个对象提供一个代理对象&#xff0c;并由代理对象控制原对象的引用。 可能大家不太明白这句话&#xff0c;在举一个现实生活中的例子&#xff1a;比…