1.首先我们先添加一个按钮到控制器中
2.分别给按钮添加 单击事件,和长按时间
在面使用了2种 方式添加单击事件, addTarget 和 添加手势
3.分析一下几种情况:
1) 点击事件
如果同时用 addTarget 和添加单击手势后
发现添加了手势的点击会响应,也就是说 addTarget 方法添加的事件无效了
执行的是这个方法 -(void)buttonTapListener:(UIGestureRecognizer*)recognizer
2) 长按事件
当我们按住这个按钮超过1秒时, 时间我们可以设置的longPress.minimumPressDuration = 1;
监听长按手势的方法-(void)buttonLongPressListener:(UIGestureRecognizer*)recognizer
被调用,而 点击事件没有响应了,2种方式的点击事件都没有响应了
再来研究一下长按手势的事件,我们会发现:
当手指点击下去,停留1秒后 事件响应了
而手指离开时, 监听事件也响应了
也就是,一个长按手势,会调用两次事件.
我们可以根据 state 来判断手指是点击还是离开
UIGestureRecognizerStateBegan, 手势开始
UIGestureRecognizerStateChanged, 手势移动了
UIGestureRecognizerStateEnded, 手势结束
[self.button addTarget:self action:@selector(buttonOnClickListener:) forControlEvents:UIControlEventTouchUpInside];
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(buttonTapListener:)];
UILongPressGestureRecognizer * longPress =[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(buttonLongPressListener:)];
longPress.minimumPressDuration = 1;
[self.button addGestureRecognizer:tap];
[self.button addGestureRecognizer:longPress];
}
-(void)buttonOnClickListener:(UIButton*)sender{
DLog(@"buttonOnClickListener");
}
-(void)buttonTapListener:(UIGestureRecognizer*)recognizer{
DLog(@"buttonTapListener");
}
-(void)buttonLongPressListener:(UIGestureRecognizer*)recognizer{
DLog(@"buttonLongPressListener %ld",recognizer.state);
}
网友评论