在ios开发过程中手势识别是很重要的一个key
手势识别有六种:
//点击的手势:
// 我们需要定义一个方法,当手势识别检测到的时候,运行
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapAction:)];
// setNumberOfTapsRequired 点按次数
[tap setNumberOfTapsRequired:1];
// setNumberOfTouchesRequired 点按的手指数量
[tap setNumberOfTouchesRequired:1];
// 把手势识别增加到视图上
[_demoView addGestureRecognizer:tap];
//捏合的手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pinchAction:)];
[_demoView addGestureRecognizer:pinch];
//旋转的手势
UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(rotationAction:)];
[_demoView addGestureRecognizer:rotation];
//拖动 的手势
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(panAction:)];
[_demoView addGestureRecognizer:pan];
//长按得手势
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(longPressAction:)];
[_demoView addGestureRecognizer:longPress];
//轻扫的手势
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(swipeAction:)];
[swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];
[_demoView addGestureRecognizer:swipeLeft];
#pragma mark - 轻扫手势
- (void)swipeAction:(UISwipeGestureRecognizer *)sender
{
NSLog(@"%d", sender.direction);
switch (sender.direction) {
case UISwipeGestureRecognizerDirectionLeft:
NSLog(@"向左扫");
break;
case UISwipeGestureRecognizerDirectionRight:
NSLog(@"向右扫");
break;
case UISwipeGestureRecognizerDirectionUp:
NSLog(@"向上扫");
break;
case UISwipeGestureRecognizerDirectionDown:
NSLog(@"向下扫");
break;
default:
break;
}
}
#pragma mark - 长按手势
- (void)longPressAction:(UILongPressGestureRecognizer *)sender
{
// 我们可以利用demoView的Tag属性,默认时tag=0
// 如果tag=0,我们放大一倍,否则,我们缩小一半
CGFloat scale;
if (_demoView.tag == 0) {
scale = 2.0;
_demoView.tag = 1;
} else {
scale = 0.5;
_demoView.tag = 0;
}
sender.view.transform = CGAffineTransformScale(sender.view.transform, scale, scale);
}
#pragma mark - 拖放手势
- (void)panAction:(UIPanGestureRecognizer *)sender
{
// 在拖放手势中是需要考虑手指的状态的UIGestureRecognizerState
// 在拖放手势中使用的状态是UIGestureRecognizerStateChanged
// 通常在使用拖放手势的时候,当手指离开的时候,应该做一个很小的动作,提醒用户拖放完成
if (sender.state == UIGestureRecognizerStateChanged) {
// locationInView
[_demoView setCenter:[sender locationInView:self.view]];
} else if (sender.state == UIGestureRecognizerStateEnded) {
[_demoView setBackgroundColor:[UIColor yellowColor]];
}
}
#pragma mark - 旋转手势
- (void)rotationAction:(UIRotationGestureRecognizer *)sender
{
sender.view.transform = CGAffineTransformRotate(sender.view.transform, sender.rotation);
// 和捏合操作类似,旋转角度同样需要方福伟
sender.rotation = 0.0f;
}
#pragma mark - 捏合手势
- (void)pinchAction:(UIPinchGestureRecognizer *)sender
{
// 有关转换的内容,我们在后续动画部分再继续
sender.view.transform = CGAffineTransformScale(sender.view.transform, sender.scale, sender.scale);
// 缩放功能很简单,但是不要忘记将比例复位
sender.scale = 1.0f;
NSLog(@"捏我了");
}
#pragma mark - 点按手势
- (void)tapAction:(UITapGestureRecognizer *)sender
{
NSLog(@"点我了 %@", sender);
}
简单操作先介绍到这里 :其中有可能手势识别的时候有时候回和你在添加在同一个俯视图中的子视图重合 这个时候 一定要做好判断: