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]; }
相关文章推荐
- STL系列之一 deque双向队列
- Java基础10——GUI
- Longest Consecutive Sequence(未)
- Sys.WebForms.PageRequestManagerServerErrorException: 在服务器上处理请求时出现未知错误解决办法
- Activity生命周期交互设计思想和应用场景(附源码)
- poj 1679 The Unique MST 判断最小生成树是否唯一(图论)
- apue 第十五章 进程间通信
- UILabel字体加粗 IOS
- leetcode 60: Permutation Sequence
- Common Subsequence(最长公共子序列DP)
- 调整UILabel行高间距
- codeforces 566F F. Clique in the Divisibility Graph(dp)
- 常用类库StringBuilder
- 【LeetCode】232 & 225 - Implement Queue using Stacks & Implement Stack using Queues
- 在iOS 8中使用UIAlertController
- 【转】UITableView使用详解
- 洛谷1373 小a和uim之大逃离
- easyui dataGrid接收嵌套JSON
- easyui dialog子窗口关闭父窗口
- android:layout_centerHorizontal="true"和 android:gravity="center_horizontal"什么区别?