在学习手势识别的点击手势时 ,遇到了下列两个问题,请高手帮忙解决
1、同时写单击和双击,运行时只能调用单击手势效果,而没有双击效果?(假如不合写单击,就可以实现)
2、手势动作处理函数的无参数可执行,而将参数改为(sender:UITapGestureRecognizer)则会出错
具体代码如下:
1、同时写单击和双击,运行时只能调用单击手势效果,而没有双击效果?(假如不合写单击,就可以实现)
2、手势动作处理函数的无参数可执行,而将参数改为(sender:UITapGestureRecognizer)则会出错
具体代码如下:
@IBOutlet weak var myimage: UIImageView! override func viewDidLoad() { super.viewDidLoad() ///创建点击手势 //1.创建点击手势[扩展:target 一般是控制器对象] var tap = UITapGestureRecognizer(target: self, action: "doubleTap") //2.设置点击次数 tap.numberOfTapsRequired = 2 //点击手指个数 tap.numberOfTouchesRequired = 1 //3.将手势添加到视图上 self.myimage.addGestureRecognizer(tap) //合写为一个语句可以实现单指单击【原因是点击次数和手指默认值为1,若要双击则要分开写】(此时确无法实现双击效果,但是分开写却可以) self.myimage.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "singleTap")) } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } //单击交互事件 func singleTap()->Int{//??假如加上参数(sender:UITapGestureRecognizer)会出错:unrecognized selector sent to instance 0x7f926355b450 //创建提示框控制器变量 var alertCon = UIAlertController(title: "单击屏幕", message: nil, preferredStyle: UIAlertControllerStyle.Alert) //创建提示框事件 var alerAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) alertCon.addAction(alerAction) //设置当前视图器为提示框控制器 self.presentViewController(alertCon, animated: true, completion: nil) return 1 } //双击交互事件 //sender: UITapGestureRecognizer func doubleTap(){ //创建提示框控制器变量 var alertCon = UIAlertController(title: "双击屏幕", message: nil, preferredStyle: UIAlertControllerStyle.Alert) //创建提示框事件 var alerAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil) alertCon.addAction(alerAction) //设置当前视图器为提示框控制器 self.presentViewController(alertCon, animated: true, completion: nil) }
解决方案
5
– (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;
实现这个协议方法
通过判断touch.tapCount可以判断是单击还是双击
实现这个协议方法
通过判断touch.tapCount可以判断是单击还是双击
20
第一个问题:
self.myimage.addGestureRecognizer(UITapGestureRecognizer(target: self, action: "singleTap"))
这里指定的singleTap方法是无参数的,所以你真正添加的singleTap方法带参数,它肯定找不到了
第二个问题:
单击和双击确实有你说的问题,所以解决思路是延时判断,是单击还是双击;
5
需要本人定义判断是单击还是双击吧,如延时超过多久