iphone手势识别(双击、捏、旋转、拖动、划动、长按)UITapGestureRecognizer

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];  

  }  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值