模拟手指或者鼠标单击和双击

有时候需要在同一个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
    }
时间: 2024-11-04 03:59:46

模拟手指或者鼠标单击和双击的相关文章

用VBS控制鼠标(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击、鼠标右击)

Demon's Blog 忘记了,喜欢一个人的感觉 Demon's Blog  ?  程序设计  ?  用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) ? bbPress积分插件--Virtual Money VBS调用WMI监视注册表变动 ? 用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击) 标题: 用VBS控制鼠标(获取鼠标坐标.鼠标移动.鼠标单击.鼠标双击.鼠标右击)作者: Demon链接: http://demon.tw/programm

用VBS控制鼠标的实现代码(获取鼠标坐标、鼠标移动、鼠标单击、鼠标双击)

网上搜到的答案普遍是VBS无法实现,或者是要用第三方COM(ActiveX?)组件.我对第三方组件是很反感的,使用第三方组件毫无可移植性可言,因为别人的系统中不一定注册了这个组件.我的建议是,尽量不要在VBS代码中调用第三方组件,除非你的程序只是写来自己用.(顺便说一下,也尽量不要用不靠谱的Sendkeys方法,原因不解释) 好了,废话就说这么多,现在说说用VBS控制鼠标的方法.我以前写过一篇<VBS调用Windows API函数>,本以为既然都能调用API了,用VBS控制鼠标还不是很简单是事

(转)MFC鼠标单击消息拦截双击消息

如果LButtonDown和LButtonDblClk同时有实现的话 总会实现单击消息,在网上找解决方法,思想是在单击消息实现中取时间,计算两次单击事件的时间差 来回尝试修改,最后成这个样子,还算简单明了 clickInterval = 0: void OnLButtonDown(UINT nFlags, CPoint point) { if(GetTickCount() - clickInterval < GetDoubleClickTime()) {  this->OnLButtonDbl

手势(2)——单击,双击,判断左右划

#import "QYCustomView.h" #define  HOR_SWIPE_MIN 20 //水平上,当低于这个值的时候, 不认为他是一个横扫的手势#define  VAR_SWIPE_MAX 40 //在垂直上,设置这误差范围,如果大于这个值的话, 横扫无效 @implementation QYCustomView //当我们的事件开始的时候调, 对于touch来说, 实际上当手指头放到屏幕上的时候,这个方法会被调用- (void)touchesBegan:(NSSet

Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)

我们依据上一次介绍的触屏事件和事件队列等知识来实现触屏的单击,双击,三连击事件. 下图为我们实现的效果图: 单击精灵跳跃一个高度, 双击精灵跳跃的高度比单击的高 三连击精灵跳跃的跟高 好了.開始动手吧. 新建项目.删除多余的代码 接着在Classes文件夹下建立两个文件,这里我就命名为Human了 (在Classes上右键加入新建项,选择头文件,名称Human.h,位置浏览到Classes文件夹下) 由于要实现精灵能接受触屏事件,所以我们不能用CCSprite ,须要自己写个类继承CCSprit

【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验四:按键模块③ — 单击与双击

实验四:按键模块③ — 单击与双击 实验三我们创建了“点击”还有“长点击”等有效按键的多功能按键模块.在此,实验四同样也是创建多功能按键模块,不过却有不同的有效按键.实验四的按键功能模块有以下两项有效按键: l 单击(按下有效): l 双击(连续按下两下有效). 图4.1 单击有效按键,时序示意图. 实验四的“单击”基本上与实验三的“点击”一模一样,既按键被按下,经过消抖以后isSClick信号被拉高一个时钟,结果如图4.1所示,过程非常单调.反之,“双击”实现起来,会比较麻烦一些,因为我们还要

unity3D 游戏物体同时绑定单击、双击事件

前言 在unity中我们常用的获取鼠标点击的方法有 在3D场景中,一般用在Update方法中,每一帧调用 void Update(){ if(Input.GetMouseButtonDown(0)){ Debug.log("鼠标左键点击"); } } 在画布场景中,一般用在OnGUI方法中,这个也是一个循环调用的方法 void OnGUI() { Event e = Event.current; if (e.isMouse && (e.clickCount == 2))

显示鼠标单击控件次数

#include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE hInst; /* The 'main' function of Win32 GUI programs: this is where execution starts */ int WINAPI WinMain(     HINSTANCE hInstance,     HINSTANCE hPrevInstance,    

android中根据touch事件判断单击及双击

private static final int MAX_INTERVAL_FOR_CLICK = 250;     private static final int MAX_DISTANCE_FOR_CLICK = 100;     private static final int MAX_DOUBLE_CLICK_INTERVAL = 500;     int mDownX = 0;     int mDownY = 0;     int mTempX = 0;     int mTempY