[iOS UI进阶 - 3.2] 手势识别器UIGestureRecognizer

- (void) testTap {
// 创建手势识别器
UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRun:)];
tapRec.numberOfTapsRequired = ; // 触发需要点击的次数
tapRec.numberOfTouchesRequired = ; // 触发需要同时点击的点数目
// 配置手势识别器到控件
[self.hvwView addGestureRecognizer: tapRec];
}
/** tap手势的事件处理方法 */
- (void) tapRun:(UITapGestureRecognizer *) tapRec {
NSLog(@"tapRun");
}
- (void) testLongPress {
UILongPressGestureRecognizer *longRec = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressRun:)];
longRec.minimumPressDuration = ; // 长按生效时间
longRec.allowableMovement = ; // 长按允许移动范围,单位:px
[self.hvwView addGestureRecognizer:longRec];
}
typedef enum {
UISwipeGestureRecognizerDirectionRight = << ,
UISwipeGestureRecognizerDirectionLeft = << ,
UISwipeGestureRecognizerDirectionUp = << ,
UISwipeGestureRecognizerDirectionDown = <<
} UISwipeGestureRecognizerDirection;
- (void) testSwipe {
UISwipeGestureRecognizer *swipeRec = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRun:)];
swipeRec.direction = UISwipeGestureRecognizerDirectionRight; // 轻扫的方向
[self.hvwView addGestureRecognizer:swipeRec];
}
- (void) testPinch {
UIPinchGestureRecognizer *rec = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRun:)];
[self.hvwView addGestureRecognizer:rec];
}
- (void) pinchRun:(UIPinchGestureRecognizer *) rec {
rec.view.transform = CGAffineTransformScale(rec.view.transform, rec.scale, rec.scale);
// 一定要复位!!!不然按住捏合会不断叠加倍数
rec.scale = ;
}

- (void) testRotation {
UIRotationGestureRecognizer *rotationRec = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationRun:)];
[self.hvwView addGestureRecognizer:rotationRec];
}
- (void) rotationRun:(UIRotationGestureRecognizer *) rec {
rec.view.transform = CGAffineTransformRotate(rec.view.transform, rec.rotation);
// 一定要复位!!!不然会在按住旋转的时候会不断叠加rotation
rec.rotation = ;
}

- (void) testPan {
UIPanGestureRecognizer *rec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRun:)];
[self.hvwView addGestureRecognizer:rec];
}
- (void) panRun:(UIPanGestureRecognizer *) rec {
// 取得拖曳距离
CGPoint movedDistance = [rec translationInView:rec.view];
CGPoint viewCenter = rec.view.center;
viewCenter.x += movedDistance.x;
viewCenter.y += movedDistance.y;
rec.view.center = viewCenter;
// 复位拖曳距离
[rec setTranslation:CGPointZero inView:rec.view];
}


@interface ViewController () <UIGestureRecognizerDelegate>
rec.delegate = self;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
// 任何两种手势识别器都能同时使用
return YES;
}
//
// ViewController.m
// GestureRecognizerTest
//
// Created by hellovoidworld on 15/1/13.
// Copyright (c) 2015年 hellovoidworld. All rights reserved.
// #import "ViewController.h" @interface ViewController () <UIGestureRecognizerDelegate> @property (weak, nonatomic) IBOutlet UIView *hvwView; @end @implementation ViewController - (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // [self testTap];
// [self testLongPress];
// [self testSwipe];
[self testRotation];
[self testPinch];
[self testPan];
} - (void) testTap {
// 创建手势识别器
UITapGestureRecognizer *tapRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRun:)];
tapRec.numberOfTapsRequired = ; // 触发需要点击的次数
tapRec.numberOfTouchesRequired = ; // 触发需要同时点击的点数目 // 配置手势识别器到控件
[self.hvwView addGestureRecognizer: tapRec];
} /** tap手势的事件处理方法 */
- (void) tapRun:(UITapGestureRecognizer *) tapRec {
NSLog(@"tapRun");
} - (void) testLongPress {
UILongPressGestureRecognizer *longRec = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressRun:)]; longRec.minimumPressDuration = ; // 长按生效时间
longRec.allowableMovement = ; // 长按允许移动范围,单位:px [self.hvwView addGestureRecognizer:longRec];
} - (void) longPressRun:(UILongPressGestureRecognizer *) rec {
NSLog(@"longPress");
} - (void) testSwipe {
UISwipeGestureRecognizer *swipeRec = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeRun:)];
swipeRec.direction = UISwipeGestureRecognizerDirectionRight; // 轻扫的方向 [self.hvwView addGestureRecognizer:swipeRec];
} - (void) swipeRun:(UISwipeGestureRecognizer *) rec {
NSLog(@"swipe");
} - (void) testRotation {
UIRotationGestureRecognizer *rotationRec = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationRun:)];
rotationRec.delegate = self; [self.hvwView addGestureRecognizer:rotationRec];
} - (void) rotationRun:(UIRotationGestureRecognizer *) rec {
rec.view.transform = CGAffineTransformRotate(self.hvwView.transform, rec.rotation); // 一定要复位!!!不然会在按住旋转的时候会不断叠加rotation
rec.rotation = ;
} - (void) testPinch {
UIPinchGestureRecognizer *rec = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchRun:)];
rec.delegate = self; [self.hvwView addGestureRecognizer:rec];
} - (void) pinchRun:(UIPinchGestureRecognizer *) rec {
rec.view.transform = CGAffineTransformScale(rec.view.transform, rec.scale, rec.scale); // 一定要复位!!!不然按住捏合会不断叠加倍数
rec.scale = ;
} - (void) testPan {
UIPanGestureRecognizer *rec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panRun:)];
rec.delegate = self; [self.hvwView addGestureRecognizer:rec];
} - (void) panRun:(UIPanGestureRecognizer *) rec {
// 取得拖曳距离
CGPoint movedDistance = [rec translationInView:rec.view];
CGPoint viewCenter = rec.view.center;
viewCenter.x += movedDistance.x;
viewCenter.y += movedDistance.y;
rec.view.center = viewCenter; // 复位拖曳距离
[rec setTranslation:CGPointZero inView:rec.view];
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { // 任何两种手势识别器都能同时使用
return YES;
} @end
[iOS UI进阶 - 3.2] 手势识别器UIGestureRecognizer的更多相关文章
- iOS UI进阶-6.0 手势
给每个页面添加手势,只需要统一设置不是根控制器的页面,都增加手势.需要自定义导航控制器 1.继承代理 @interface BSNavigationController ()<UIGesture ...
- [iOS UI进阶 - 5.0] 手势解锁Demo
A.需求 1.九宫格手势解锁 2.使用了绘图和手势事件 code source: https://github.com/hellovoidworld/GestureUnlockDemo B ...
- [iOS UI进阶 - 3.1] 触摸事件的传递
A.事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发 ...
- [iOS UI进阶 - 0] Quiartz2D
A.简介 1. 需要掌握的 drawRect:方法的使用 常见图形的绘制:线条.多边形.圆 绘图状态的设置:文字颜色.线宽等 图形上下文状态的保存与恢复 图形上下文栈 1.基本图形绘制* 线段(线宽. ...
- [iOS UI进阶 - 3.0] 触摸事件的基本处理
A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打 ...
- iOS UI进阶-1.0 Quartz2D
概述 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统.Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF ...
- [iOS UI进阶 - 6.1] 核心动画CoreAnimation
A.基本知识 1.概念 Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍,使用它需要先添加QuartzCore.framework和引入对 ...
- [iOS UI进阶 - 6.0] CALayer
A.基本知识 1.需要掌握的 CALayer的基本属性 CALayer和UIView的关系 position和anchorPoint的作用 2.概念 在iOS中,你能看得见摸得着的东西基本上都是U ...
- [iOS UI进阶 - 2.3] 彩票Demo v1.3
A.需求 真机调试 "关于”模块 存储开关状态 打电话.发短信 应用评分 打开其他应用 cell 在iOS6 和 iOS7的适配 block的循环引用 屏幕适配 code source: ...
随机推荐
- bzoj2326: [HNOI2011]数学作业
矩阵快速幂,分1-9,10-99...看黄学长的代码理解...然而他直接把答案保存在最后一行(没有说明...好吧应该是我智障这都不知道... #include<cstdio> #inclu ...
- 添加gif效果图
1.贴加第三方包 http://blog.csdn.net/iamlazybone/article/details/5972234 2. <FrameLayout android:id=&quo ...
- 生产者和消费者(.net实现)
生产者和消费者,是多线程中的经典问题,听过java方面的这个问题的培训,闲暇时用.net实现了这 个问题.在此实现的是,生产一个消息后,消费一个消息,再生产一个消息,循环往复. 1.消息代码 us ...
- Content-Type
HTTP Content-type .*( 二进制流,不知道下载文件类型) application/octet-stream .txt text/plain 没有csv这种类型
- mysql优化小技巧
对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) b: 添加适当索引(index) [四种: 普通索引.主键索引.唯一索引unique.全文索引] c: 分表技术(水平 ...
- JavaScript 现状:方言篇
导读 JavaScript 和其他编程语言有一个很大的不同,它不像单纯的一个语言,而像一个由众多方言组成大家族.从 2009 年 CoffeeScript 出现开始,近几年出现了大量基于 JavaSc ...
- Entity Framework 5.0
今天 VS2012 .net Framework 4.5 Entity Framework 5.0 三者共同发布了. ( EF5 Released ) 在介绍新特性之前,先与大家回顾一下EF版 ...
- CABasicAnimation 使用
1. 基本使用 UIView * view = [[UIView alloc]initWithFrame:CGRectMake(50, 50, 50,50)]; view.backgroundColo ...
- IOS UIScrollView中 使用 touch 无法响应的问题
添加一个 Category 然后在使用到 UIScrollView 的文件里面 导入这个头文件 就可以 // // UIScrollView+UITouch.m // alarm // // ...
- 深入学习Android有关网络连接的内容
基于实际项目中碰到的些许问题,开始重新深入学习Android网络连接有关知识. Android的4.1.2版本的AndroidHttpClient模块setSoTimeout之后实际超时时间和设置的时 ...