博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟手指或者鼠标单击和双击
阅读量:6516 次
发布时间:2019-06-24

本文共 1813 字,大约阅读时间需要 6 分钟。

有时候需要在同一个UI上实现双击和单击的操作,IOS的手势识别中自带有单击双击甚至三击四击。。。。

具体是这样的:

var tapGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapGesture:")        tapGestureRecognizer.numberOfTouchesRequired=2//每次点击要求有两个点        tapGestureRecognizer.numberOfTapsRequired=3//需要连续点击三次才能触发

但是上面只能实现单一的在同一个UI上的操作。即要么实现单击,要么实现双击。

所以只能用计时器模拟单击双击的操作。

首先定义一个手指的单击操作:

var tapOnceGestureRecognizer = UITapGestureRecognizer(target: self, action: "tapOnView:")        tapOnceGestureRecognizer.numberOfTouchesRequired=1        tapOnceGestureRecognizer.numberOfTapsRequired=1        self.addGestureRecognizer(tapOnceGestureRecognizer)

下面是具体的算法: 

var pt1:CGPoint?    var pt2:CGPoint?    var timerTouch:NSTimer?    var n:Int = 0    //双击    func tapOnView(sender:UITapGestureRecognizer){        timerTouch?.invalidate()        timerTouch = nil        if n == 0{            pt1 = sender.locationInView(self)        }else{            pt2 = sender.locationInView(self)        }        n += 1        timerTouch = NSTimer.scheduledTimerWithTimeInterval(NSTimeInterval(0.5), target: self, selector: "touchOnceTick", userInfo: "jimmy", repeats: true)//时间一般设置为0.5秒比较合理        if n % 2 == 0{            timerTouch?.invalidate()            timerTouch = nil            n = 0            var absX = abs(pt2!.x - pt1!.x)            var absY = abs(pt2!.y - pt1!.y)            var radiusMax:CGFloat = 30            if absX < radiusMax && absY < radiusMax{//此处注意的是需要设定一个两次单击的坐标误差,第一次点击和第二次点击的距离不能隔的太远,比如第二次点击在第一次点击的坐标的300像素外,这种情况就算点击的时间再快,也不能视为双击。同时也不能完全将第一次坐标和第二次坐标相等才视为双击,手指点击两次不太可能做到完全相等。                          println("双击")            }        }    }    func touchOnceTick(){        timerTouch?.invalidate()        timerTouch = nil        if n == 1{              println("单击")       }        n = 0

 

转载于:https://www.cnblogs.com/JimmyBright/p/4336346.html

你可能感兴趣的文章
jQuery清空标签内容--防止内存泄露
查看>>
关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
查看>>
比RBAC更好的权限认证方式(Auth类认证)
查看>>
httpd之编译安装详解
查看>>
服务器磁盘采购分析
查看>>
PHP中is_callable()函数的用法详解
查看>>
android动画
查看>>
新书试读_信息系统项目管理师考试考点分析与真题详解
查看>>
LVS Nginx HAProxy 优缺点
查看>>
images对象实现图片幻灯片
查看>>
Oracle 12c 日常维护
查看>>
CF 445A DZY Loves Chessboard
查看>>
Cobbler简介
查看>>
恢复 git reset -hard 的误操作
查看>>
C# WinForm 文件上传下载
查看>>
【javascript】ajax请求 编码问题导致的ie浏览器在输入中文文字后没有内容,而chrome正常搜到文字...
查看>>
Git分支操作
查看>>
Spring Integration概述
查看>>
[SAP ABAP开发技术总结]权限对象检查
查看>>
RDIFramework.NET ━ 9.6 模块(菜单)管理 ━ Web部分
查看>>