您的位置:首页 > 移动开发

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

2012-10-03 13:22 525 查看
http://blog.csdn.net/rhljiayou/article/details/7553927

v

首先新建一个基于Sigle view Application的项目,名为GestureTest;我的项目结构如下:



往viewController.xib文件里拖动一个imageView,并使覆盖整个屏幕,改动属性为:



viewController.h文件:

[cpp] view
plaincopy

#import <UIKit/UIKit.h>  

  

@interface ViewController : UIViewController{  

    IBOutlet UIImageView *imageView;  

}  

@property (nonatomic,retain)IBOutlet UIImageView *imageView;  

@end  

并使xib文件里的imageView与之连接;

然后是viewController.m文件的实现部分:

[cpp] view
plaincopy

@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 application up
相关文章推荐