我的IOS学习之路(三):手势识别器
在iOS的学习中,对于手势的处理是极为重要的,如对于图片,我们经常需要进行旋转,缩放以及移动等。这里做一下总结,详见代码。
- (void)viewDidLoad
{
[super viewDidLoad];
UIImage *image = [UIImage imageNamed:@"018.png"];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
imageView.frame = CGRectMake(, , , );
[self.view addSubview:imageView];
//开启用户交互
imageView.userInteractionEnabled = YES;
//缩放手势识别器
UIPinchGestureRecognizer *pinGes = [[UIPinchGestureRecognizer alloc] init];
pinGes.delegate = self;
[pinGes addTarget:self action:@selector(pinGes:)];
[imageView addGestureRecognizer:pinGes];
//旋转手势识别器
UIRotationGestureRecognizer *rotaGes = [[UIRotationGestureRecognizer alloc] init];
rotaGes.delegate = self;
imageView.userInteractionEnabled = YES;
[rotaGes addTarget:self action:@selector(rota:)];
[imageView addGestureRecognizer:rotaGes];
//移动手势识别器
UIPanGestureRecognizer *panGes = [[UIPanGestureRecognizer alloc] init];
[panGes addTarget:self action:@selector(panGes:)];
[imageView addGestureRecognizer:panGes];
//长按手势识别器
UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] init];
//设置长按时间标准(默认时间为0.5秒)
longPress.minimumPressDuration = 1.0;
[longPress addTarget:self action:@selector(longPress:)];
[imageView addGestureRecognizer:longPress];
}
//此方法的返回值表示手势识别器是否支持多手势操作
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}
//长按操作
- (void) longPress: (UILongPressGestureRecognizer *)ges
{
//开始长按时进行的操作
if (ges.state == UIGestureRecognizerStateBegan) {
NSLog(@"begin");
//结束长按时进行的操作
}else if (ges.state == UIGestureRecognizerStateEnded){
NSLog(@"end");
}
}
//移动操作
- (void) panGes: (UIPanGestureRecognizer *)ges
{
//获取相对于父视图移动的距离
CGPoint point = [ges translationInView:self.view];
//开启动画
[UIView beginAnimations:Nil context:Nil];
//设置动画时间
[UIView setAnimationDuration:];
//通过形变属性移动
ges.view.transform = CGAffineTransformTranslate(ges.view.transform, point.x, point.y);
//因为手势识别器会对每次移动的距离进行累加,所以当移动一次后,需要将相对移动距离设置为(0,0);
[ges setTranslation:CGPointMake(, ) inView:self.view];
//通过中心点移动
// ges.view.center = CGPointMake(ges.view.center.x + point.x, ges.view.center.y + point.y);
// [ges setTranslation:CGPointMake(0, 0) inView:self.view];
//动画结束
[UIView commitAnimations];
}
//旋转操作
- (void) rota: (UIRotationGestureRecognizer *)ges
{
//设置形变属性
ges.view.transform = CGAffineTransformRotate(ges.view.transform, ges.rotation);
//因为CGAffineTransformRotate函数会将每一次的旋转角度进行叠加,所以需要将手势识别器的旋转角度置0;
ges.rotation = ;
}
//缩放操作
- (void)pinGes: (UIPinchGestureRecognizer *)ges
{
// NSLog(@"get in...");
//因为CGAffineTransformScale函数会将缩放比例进行累乘,所以需要将手势识别器的缩放比例设置1
ges.view.transform = CGAffineTransformScale(ges.view.transform, ges.scale, ges.scale);
ges.scale = 1.0f;
}
我的IOS学习之路(三):手势识别器的更多相关文章
- IOS开发---菜鸟学习之路--(二十二)-近期感想以及我的IOS学习之路
在不知不觉当中已经写了21篇内容 其实一开始是没有想些什么东西的 只是买了Air后 感觉用着挺舒服的,每天可以躺在床上,就一台笔记本,不用网线,不用电源,不用鼠标,不用键盘,干干脆脆的就一台笔记本. ...
- 学习之路三十九:新手学习 - Windows API
来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...
- Redis——学习之路三(初识redis config配置)
我们先看看config 默认情况下系统是怎么配置的.在命令行中输入 config get *(如图) 默认情况下有61配置信息,每一个命令占两行,第一行为配置名称信息,第二行为配置的具体信息. ...
- 浅谈iOS学习之路(转)
转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...
- 浅谈iOS学习之路
转眼学习iOS已经快两年的时间了,这个路上有挫折也有喜悦,一步步走过来发现这个过程是我这一辈子的财富,我以前的老大总是对我说,年轻就是最大的资本(本人91年),现在才算是慢慢的体会到,反观自己走过的这 ...
- 【学习总结】UIGestureRecognizer(手势识别器)
基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...
- IOS 响应者链条 and UIGestureRecognizer 手势识别器)
一次完整的触摸事件的传递响应的过程 UIAppliction --> UIWiondw -->递归找到最适合处理事件的控件 控件调用touches方法-->判断是否实现touches ...
- [iOS UI进阶 - 3.2] 手势识别器UIGestureRecognizer
A.系统提供的手势识别器 1.敲击手势 UITapGestureRecognizer numberOfTapsRequired: 敲击次数 numberOfTouchesRequired: 同时敲 ...
- 纪录我的iOS学习之路
学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...
随机推荐
- Apriori算法
APRIORI Apriori算法是一种挖掘关联规则的频繁项集算法,其核心思想是通过候选集生成和情节的向下封闭检测两个阶段来挖掘频繁项集.而且算法已经被广泛的应用到商业.网络安全等各个领域. Apri ...
- poj1547---结构数组
题意:老师发给每个学生的橡皮泥相同,找出谁抢了谁的橡皮泥 思路:结构数组存储每个学生的橡皮总量,和名字 /* 结构数组存储用户信息--只放名称和体积 while输入循环复用长宽高变量 for循环求所有 ...
- 删除select中所有option选项
这样写 <select id="search"> <option>baidu</option> <option>sogou</ ...
- Ubuntu创建快捷方式
正常安装putty不成功:sudo apt-get install putty 总是报网络方面的错,我只好从官网下载源码自己编译.还是很容易的,找到unix目录,然后执行:make -f Makefi ...
- 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)
很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...
- Swift学习笔记:类和结构
一.类和结构的异同 类和结构有一些相似的地方.它们都能够: 1. 定义一些能够赋值的属性: 2. 定义具有功能性的方法 3. 定义下标.使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现 ...
- mysql主从切换步骤
1> 正常切换 1)从server检查SHOW PROCESSLIST语句的输出,直到你看到Has read all relaylogwaiting for the slave I/O th ...
- codefirst初尝试
Code First 约定 借助 CodeFirst,可通过使用 C# 或Visual Basic .NET 类来描述模型.模型的基本形状可通过约定来检测.约定是规则集,用于在使用 Code Firs ...
- bool operator==(const Array&)const; 这最后一个const 是做什么用的
字符重载也是个函数,在函数末尾加CONST 这样的函数叫常成员函数.常成员函数可以理解为是一个“只读”函数,它既不能更改数据成员的值,也不能调用那些能引起数据成员值变化的成员函数,只能调用const成 ...
- Java DecimalFormat 格式化数字
我们经常要将数字进行格式化,比如取2位小数,这是最常见的.Java 提供 DecimalFormat 类,帮你用最快的速度将数字格式化为你需要的样子.下面是一个例子: importjava.text. ...