iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
来源:互联网 发布:淘宝上传数据包教程 编辑:程序博客网 时间:2024/04/29 12:59
UITapGestureRecognizer 双击
UIPinchGestureRecognizer 捏
UISwipeGestureRecognizer 滑动 (四个方向,分别设置)
UIPanGestureRecognizer 拖动
UILongPressGestureRecognizer 长按
首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下:
往viewController.xib文件里拖动一个imageView,并使覆盖整个屏幕,改动属性为:
viewController.h文件:
[cpp]viewplaincopy
1. #import <UIKit/UIKit.h>
2.
3. @interface ViewController : UIViewController{
4. IBOutlet UIImageView *imageView;
5. }
6. @property (nonatomic,retain)IBOutlet UIImageView *imageView;
7. @end
并使xib文件里的imageView与之连接;
然后是viewController.m文件的实现部分:
[cpp]viewplaincopy
@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.numberrOfTapsRequired=2;
// imageView添加手势识别
[imageView addGestureRecognizer:tapGesture];
//2、手势为捏的姿势:按住option按钮配合鼠标来做这个动作在虚拟器上
UIPinchGestureRecognizer *pinchGesture=[[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(handlePinchGesture:)];
[imageView addGestureRecognizer:pinchGesture];//imageView添加手势识别
//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];
//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)handrleTapGesture:(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];
}
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- UITapGestureRecognizer手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- iphone练习之手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- ios手势识别(双击、捏、旋转、拖动、划动、长按, 上下左右滑动)
- Swift基础--手势识别(双击、捏、旋转、拖动、划动、长按)
- [IOS]手势识别(双击、捏、旋转、拖动、划动、长按)
- Android 对Layout_weight属性完全解析以及使用ListView来实现表格
- ios简单动画添加
- 精确求阶乘
- 一维条码与二维条码的码制区别
- 统计一篇文章的单词数量,并且输出频率前10单词的数量
- iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer
- mfc如何将整型转换为字符串
- JSP(3):servlet 用同一用户的不同页面共享数据(session)
- 第三周作业
- C++ 设计模式资源
- Ubuntu普通任务
- linux文件系统的系统分析--(十六)sysfs和设备模型--从platform和rtc来感受设备模型
- 编译Hadoop出现的错误
- java jni example