首先新建一个基于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/chang6520/article/details/7924313


原创内容如转载请注明:来自 阿权的书房
收藏本文到网摘
发表评论
AD
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML 打开UBB 打开表情 隐藏
昵称   密码   游客无需密码
网址   电邮   [注册]
               

验证码 不区分大小写
 

阅读推荐

服务器相关推荐

开发相关推荐

应用软件推荐