在学习手势识别的点击手势时 ,遇到了下列两个问题,请高手帮忙解决
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
需要本人定义判断是单击还是双击吧,如延时超过多久