您的位置:首页 > 产品设计 > UI/UE

iOS基础-UIKit框架-手势处理

2015-08-02 15:53 357 查看


手势识别器通用代码注释如下(以tap为例):

//0.打开UIImageView的用户交互(UIImageView默认不能进行用户交互)
self.iconView.userInteractionEnabled = YES;
//1.创建手势识别器
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
//1.1.设置手势识别器的属性
//设置用户必须点击几次才能触发点击事件
tap.numberOfTapsRequired = 2;
//设置用户必须几根手指同时点击才会触发事件
tap.numberOfTouchesRequired = 2;

tap.delegate = self;(设置代理并遵守代理协议)

//2.添加手势识别器到view
[self.iconView addGestureRecognizer:tap];

//3.监听手势识别器
[tap addTarget:self action:@selector(tapView)];

//该方法返回一个BOOL值,该BOOL值决定了是否响应此次点击事件。所以如果返回NO,就不会调用tapView方法。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizershouldReceiveTouch:(UITouch *)touch
{
//获取点击的位置
CGPoint point = [touch locationInView:touch.view];
return (point.x > self.iconView.frame.size.width * 0.5)?YES :NO;

//监听手势的方法

-(void)tapView
{
NSLog(@“图片被点击了”);
}


  

具体应用:

一、敲击

1.添加一个UIImageView属性iconView
2.敲击事件

-(void)test

{

self.iconView.userInteractionEnabled = YES;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
tap.numberOfTapsRequired = 2;
tap.numberOfTouchesRequired = 2;

[self.iconView addGestureRecognizer:tap];
[tap addTarget:self action:@selector(tapView)];

}

-(void)tapView
{
NSLog(@"敲击事件");
}


二、长按+轻扫
1.添加一个UIView属性costomView
2.长按事件

-(void)test
{

UILongPressGestureRecognizer longPress = [[UILongPressGestureRecognizer alloc] init];
//1.1设置长按手势识别器的属性
longPress.minimumPressDuration = 5;
//手指按下后事件响应之前允许手指移动的偏移位
longPress.allowableMovement = 10;
[self.customView addGestureRecognizer:longPress];
[longPress addTarget:self action:@selector(longPressView)];
}

-(void)longPressView
{
NSLog(@“长按事件”);
}


3.轻扫事件

-(void)test
{

UISwipeGestureRecognizer Swipe = [[UISwipeGestureRecognizer alloc] init];

//设置轻扫的方向(每行代码代表一个方向,总共4个方向,可以共存)
swipe.direction = UISwipeGestureRecognizerDirecionDown;
[self.customView addGestureRecognizer:Swipe];
[Swipe addTarget:self action:@selector(SwipeView)];
}

-(void)SwipeView
{
NSLog(@“轻扫事件”);
}


三、旋转+放缩
1.添加一个UIImageView属性iconView
2.旋转(记得在故事板右边开启多点触控)

-(void)test

{
UIRotationGestureRecognizer *gesture = [[UIRotationGestureRecognizer alloc] init];
[self.iconView addGestureRecognizer:gesture];
gesture.delegate = self;

[gesture addTarget:self action:@selector(rotationView:)];
}

-(void)rotationView:(UIRotationGestureRecognizer *)gesture
{
NSLog(@"旋转事件 %.1f", gesture.rotation);
//在传入的transform基础上递增一个弧度
self.iconView.transform = CGAffineTransformMakeRotate     (self.inconView.transform,gesture.rotation);
//每次都把上一次手势的位置作为0度,不这样做的话,如果本来是45度,下次再转1度就会在原有基础上增加46度,而这样就不对了。
gestrue.rotation =0;
}


  

3.放缩

-(void)test

{
//捏合手势
UIPinchGestureRecognizer *pinch = [[UIPinchGestureRecognizer alloc]  init];
[self.iconView addGestureRecognizer:pinch];
pinch.delegate = self;

[pinch addTarget:self action:@selector(pinchView)];

}

-(void)pinchView:(UIPinchGestureRecognizer *)pinch
{
self.iconView.transform = CGAffineTransformScale(self.iconView.transform,pinch.scale,pinch.scale);
//如果上一次的位置不设置为1.0,就会在原有基础上继续放缩,这是不对的。
pinch.scale = 1.0;
}


4.遵从代理协议,实现代理方法,使其支持多手势同时进行

//该方法返回的BOOL值决定了view是否能够同时响应多个手势
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultanenouslyWithGestureRecognizer:
(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}


四、拖拽
1.添加一个UIImageView属性costomView
2.拖拽

-(void)test

{
UIPanGestureRecognizer *pan= [[UIPanGestureRecognizer alloc]  init];
[self.costomView addGestureRecognizer:pan];
[pan addTarget:self action:@selector(panView:)];
}

- (void)panView
{
//返回的值是以手指按下的点为原点
CGPoint point = [pan translationInView:pan.view];
CGPoint temp = self.customView.center;
temp.x += point.x;
temp.y += point.y;
self.customView.center = temp;
//将其清零
[pan.setTranlation:CGPointZero inView:pan.view];
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: