iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
来源:互联网 发布:ipython windows 编辑:程序博客网 时间:2024/05/17 02:16
http://blog.csdn.net/rhljiayou/article/details/7553927
v
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下:
往viewController.xib文件里拖动一个imageView,并使覆盖整个屏幕,改动属性为:
viewController.h文件:
- #import <UIKit/UIKit.h>
- @interface ViewController : UIViewController{
- IBOutlet UIImageView *imageView;
- }
- @property (nonatomic,retain)IBOutlet UIImageView *imageView;
- @end
然后是viewController.m文件的实现部分:
- @synthesize imageView;
- CGFloat lastScaleFactor=1;//放大、缩小
- CGFloat netRotation;//旋转
- CGPoint netTranslation;//平衡
- NSArray *images;//图片数组
- int imageIndex=0;//数组下标
- - (void)viewDidLoad
- {
- //1、创建手势实例,并连接方法handleTapGesture,点击手势
- UITapGestureRecognizer *tapGesture=[[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTapGesture:)];
- //设置手势点击数,双击:点2下
- tapGesture.numberOfTapsRequired=2;
- // imageView添加手势识别
- [imageView addGestureRecognizer:tapGesture];
- //释放内存
- [tapGesture release];
- //2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
- UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)];
- [imageView addGestureRecognizer:pinchGesture];//imageView添加手势识别
- [pinchGesture release];
- //3、旋转手势:按住option按钮配合鼠标来做这个动作在虚拟器上
- UIRotationGestureRecognizer *rotateGesture=[[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(handleRotateGesture:)];
- [imageView addGestureRecognizer:rotateGesture];
- [rotateGesture release];
- //4、拖手势
- UIPanGestureRecognizer *panGesture=[[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(handlePanGesture:)];
- // [imageView addGestureRecognizer:panGesture];
- [panGesture release];
- //5、划动手势
- images=[[NSArray alloc]initWithObjects:@"cell.jpg",@"heihua.jpg",@"xuanyi.jpg", nil];
- //右划
- UISwipeGestureRecognizer *swipeGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
- [imageView addGestureRecognizer:swipeGesture];
- [swipeGesture release];
- //左划
- UISwipeGestureRecognizer *swipeLeftGesture=[[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(handleSwipeGesture:)];
- swipeGesture.direction=UISwipeGestureRecognizerDirectionLeft;//不设置黑夜是右
- [imageView addGestureRecognizer:swipeLeftGesture];
- [swipeLeftGesture release];
- //6、长按手势
- UILongPressGestureRecognizer *longpressGesutre=[[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(handleLongpressGesture:)];
- //长按时间为1秒
- longpressGesutre.minimumPressDuration=1;
- //允许15秒中运动
- longpressGesutre.allowableMovement=15;
- //所需触摸1次
- longpressGesutre.numberOfTouchesRequired=1;
- [imageView addGestureRecognizer:longpressGesutre];
- [longpressGesutre release];
- [super viewDidLoad];
- // Do any additional setup after loading the view, typically from a nib.
- }
- //双击屏幕时会调用此方法,放大和缩小图片
- -(IBAction)handleTapGesture:(UIGestureRecognizer*)sender{
- //判断imageView的内容模式是否是UIViewContentModeScaleAspectFit,该模式是原比例,按照图片原时比例显示大小
- if(sender.view.contentMode==UIViewContentModeScaleAspectFit){
- //把imageView模式改成UIViewContentModeCenter,按照图片原先的大小显示中心的一部分在imageView
- sender.view.contentMode=UIViewContentModeCenter;
- }else{
- sender.view.contentMode=UIViewContentModeScaleAspectFit;
- }
- }
- //捏的手势,使图片放大和缩小,捏的动作是一个连续的动作
- -(IBAction)handlePinchGesture:(UIGestureRecognizer*)sender{
- //得到sender捏手势的大小
- CGFloat factor=[(UIPinchGestureRecognizer*)sender scale];
- if(factor>1){
- //图片放大
- sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor+(factor-1), (lastScaleFactor+(factor-1)));
- }else{
- //缩小
- sender.view.transform=CGAffineTransformMakeScale(lastScaleFactor*factor, lastScaleFactor*factor);
- }
- //状态是否结束,如果结束保存数据
- if(sender.state==UIGestureRecognizerStateEnded){
- if(factor>1){
- lastScaleFactor+=(factor-1);
- }else{
- lastScaleFactor*=factor;
- }
- }
- }
- //旋转手势
- -(IBAction)handleRotateGesture:(UIGestureRecognizer*)sender{
- //浮点类型,得到sender的旋转度数
- CGFloat rotation=[(UIRotationGestureRecognizer*)sender rotation];
- //旋转角度CGAffineTransformMakeRotation
- CGAffineTransform transform=CGAffineTransformMakeRotation(rotation+netRotation);
- //改变图像角度
- sender.view.transform=transform;
- //状态结束,保存数据
- if(sender.state==UIGestureRecognizerStateEnded){
- netRotation+=rotation;
- }
- }
- //拖手势
- -(IBAction)handlePanGesture:(UIGestureRecognizer*)sender{
- //得到拖的过程中的xy坐标
- CGPoint translation=[(UIPanGestureRecognizer*)sender translationInView:imageView];
- //平移图片CGAffineTransformMakeTranslation
- sender.view.transform=CGAffineTransformMakeTranslation(netTranslation.x+translation.x, netTranslation.y+translation.y);
- //状态结束,保存数据
- if(sender.state==UIGestureRecognizerStateEnded){
- netTranslation.x+=translation.x;
- netTranslation.y+=translation.y;
- }
- }
- //划动手势
- -(IBAction)handleSwipeGesture:(UIGestureRecognizer*)sender{
- //划动的方向
- UISwipeGestureRecognizerDirection direction=[(UISwipeGestureRecognizer*) sender direction];
- //判断是上下左右
- switch (direction) {
- case UISwipeGestureRecognizerDirectionUp:
- NSLog(@"up");
- break;
- case UISwipeGestureRecognizerDirectionDown:
- NSLog(@"down");
- break;
- case UISwipeGestureRecognizerDirectionLeft:
- NSLog(@"left");
- imageIndex++;//下标++
- break;
- case UISwipeGestureRecognizerDirectionRight:
- NSLog(@"right");
- imageIndex--;//下标--
- break;
- default:
- break;
- }
- //得到不越界不<0的下标
- imageIndex=(imageIndex<0)?([images count]-1):imageIndex%[images count];
- //imageView显示图片
- imageView.image=[UIImage imageNamed:[images objectAtIndex:imageIndex]];
- }
- //长按手势
- -(IBAction)handleLongpressGesture:(UIGestureRecognizer*)sender{
- //创建警告
- UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:@"Image options" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Save Image",@"Copy", nil];
- //当前view显示警告
- [actionSheet showInView:self.view];
- [actionSheet release];
- }
- -(void)dealloc{
- [images release];
- [imageView release];
- [super dealloc];
- }
嗯,试试效果吧!
本博客是我自己的练习,有好多地方没有讲太清楚,还请谅解!
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- UITapGestureRecognizer手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- [IOS]手势识别(双击、捏、旋转、拖动、划动、长按)
- hdu4283 You Are the One(区间DP)
- 一种排序
- JavaScript中特有语句 for in 和 with 语句介绍
- 获取db.propeties参数值两次失误
- C 语言程序中与存储器相关的常见错误(即指针相关)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- Java中finally的执行时机
- JavaScript自学ing(3)
- 详解Java解析XML的四种方法
- zend form 防止重复提交
- 操作系統開發 - C編譯器, 內核和C庫是如何一起工作的
- android sdk 安装问题
- ubuntu防火墙设置
- 编程之美-2.3-寻找发帖“水王”