码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-14 00:59:49      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

有时候需要在同一个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
    }

 

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

标签:

原文地址:http://www.cnblogs.com/JimmyBright/p/4336346.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!