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

首先新建一个基于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];

}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值