iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
来源:互联网 发布:选创维网络电视 编辑:程序博客网 时间:2024/04/29 13:24
首先新建一个基于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并使xib文件里的imageView与之连接;
然后是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];}
本博客是我自己的练习,有好多地方没有讲太清楚,还请谅解!
转载请注明出处:http://blog.csdn.net/rhljiayou
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- UITapGestureRecognizer手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- [IOS]手势识别(双击、捏、旋转、拖动、划动、长按)
- 黑马程序员-面向对象
- tomcat健康状态监控并自动重启短信报警
- Android横屏竖屏设置
- Merge Sort [Basic] C程序 实现排序功能
- phpize以及memcache安装
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- WLDNA的个人主页建成了-本博客废弃
- rails的一些琐碎的问题集棉
- phpcms2008企业黄页模块参数未过滤致SQL注射漏洞
- sql列合并
- 黑马程序员-String类
- 将声音转换成文字
- Linux USB 鼠标驱动程序详解
- C#全部简化运算符