手势UIGestureRecognizer 几种手势的使用实现

第一种点击手势:

UITapGestureRecognizer


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

 

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];

    

    //通过添加手势,让imageView响应事件

    //创建了敲击手势

    UITapGestureRecognizer * tgr = [[UITapGestureRecognizer allocinitWithTarget:self action:@selector(onTap:)];

    //设置敲击几次才会相应

    tgr.numberOfTapsRequired = 1;

    //设置几根手指敲击才会响应

    tgr.numberOfTouchesRequired = 1;

    

    //将手势添加到imageView

    [imageView addGestureRecognizer:tgr];

    

    //必须让imageView接收事件

    imageView.userInteractionEnabled = YES;

    

    //再添加双击手势

    UITapGestureRecognizer * tgr2 = [[UITapGestureRecognizer allocinitWithTarget:self action:@selector(onTapTwice:)];

    tgr2.numberOfTapsRequired = 2;

    

    [imageView addGestureRecognizer:tgr2];

    //声明只有当双击响应失败,才能响应单击

    [tgr requireGestureRecognizerToFail:tgr2];

    [tgr release];

    [tgr2 release];

    [self.view addSubview:imageView];

    [imageView release];

}


- (void)onTap:(UITapGestureRecognizer *)tap

{

    //找到imageView

    UIImageView * imageView = (id)tap.view;

    

    [UIView beginAnimations:nil context:nil];

    [UIView setAnimationDuration:0.25];

    imageView.transform = CGAffineTransformRotate(imageView.transformM_PI_4);

    [UIView commitAnimations];  

}


- (void)onTapTwice:(UITapGestureRecognizer *)tap

{

    UIImageView * imageView = (id)tap.view;

    

    [UIView animateWithDuration:0.25 animations:^{

        imageView.transform = CGAffineTransformScale(imageView.transform, -1, 1);

    }];

}



长按手势:

UILongPressGestureRecognizer


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];

    imageView.userInteractionEnabled = YES;

    [self.view addSubview:imageView];

    [imageView release];



    

    //添加长按手势

    UILongPressGestureRecognizer * lpgr = [[UILongPressGestureRecognizer allocinitWithTarget:self action:@selector(longPress:)];

    //设置几根手指处罚

    lpgr.numberOfTouchesRequired = 1;

    //设置最小的长按时间

    lpgr.minimumPressDuration = 2;

    

    [imageView addGestureRecognizer:lpgr];

    [lpgr release];

}


- (void)longPress:(UILongPressGestureRecognizer *)lpgr

{

    

    if (lpgr.state == UIGestureRecognizerStateEnded) {

        return;

    }

    

    static BOOL isPlain = NO;

    

    UIImageView * image = (id)lpgr.view;

    

    [UIView animateWithDuration:0.25 animations:^{

        if (isPlain == YES) {

            image.transform = CGAffineTransformMakeScale(1, 1);

        } else {

            image.transform = CGAffineTransformMakeScale(1, 0.5);

        }

    } completion:^(BOOL finished) {

        isPlain = !isPlain;

    }];

}




滑动手势:

UISwipeGestureRecognizer


- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];    

    imageView.userInteractionEnabled = YES;

    [self.view addSubview:imageView];

    [imageView release];


    //添加滑动手势

    UISwipeGestureRecognizer * sgr = [[UISwipeGestureRecognizer allocinitWithTarget:self action:@selector(swipe:)];

    //监听方向

    sgr.direction = UISwipeGestureRecognizerDirectionLeft;

    

    [imageView addGestureRecognizer:sgr];

    [sgr release];

    


}


- (void)swipe:(UISwipeGestureRecognizer *)swipe

{

    if (swipe.direction & UISwipeGestureRecognizerDirectionLeft) {

        NSLog(@"向左滑动");

    } else if (swipe.direction & UISwipeGestureRecognizerDirectionRight){

        NSLog(@"向右滑动");

    } else if (swipe.direction & UISwipeGestureRecognizerDirectionUp) {

        NSLog(@"向上滑动");

    } else if (swipe.direction & UISwipeGestureRecognizerDirectionDown) {

        NSLog(@"向下滑动");

    }

}




拖动手势:

UIPanGestureRecognizer

- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];

    imageView.userInteractionEnabled = YES;

    [self.view addSubview:imageView];

    [imageView release];


    UIPanGestureRecognizer * pgr = [[UIPanGestureRecognizer allocinitWithTarget:self action:@selector(pan:)];

    //设置几根手指允许拖动

    pgr.minimumNumberOfTouches = 2;

    pgr.maximumNumberOfTouches = 2;

    

    [imageView addGestureRecognizer:pgr];

    [pgr release];

}


- (void)pan:(UIPanGestureRecognizer *)pgr

{

    static CGPoint center;

    if (pgr.state == UIGestureRecognizerStateBegan) {

        center = pgr.view.center;

        return;

    }

    //当发生拖动时,每个像素都会调用这个方法

    if (pgr.state == UIGestureRecognizerStateChanged) {

        //获得拖动偏移的坐标

        CGPoint translation = [pgr translationInView:self.view];

//        [pgr locationInView:(UIView *)]

        pgr.view.center = CGPointMake(center.x + translation.x, center.y + translation.y);

        

    }

}




旋转手势:

UIRotationGestureRecognizer

- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];

    imageView.userInteractionEnabled = YES;

    [self.view addSubview:imageView];    

    [imageView release];

    


    UIRotationGestureRecognizer * rgr = [[UIRotationGestureRecognizer allocinitWithTarget:self action:@selector(rotation:)];

    [imageView addGestureRecognizer:rgr];

    [rgr release];

    


}


- (void)rotation:(UIRotationGestureRecognizer *)rgr

{

    static CGFloat rotation = 0;

    

    rgr.view.transform = CGAffineTransformMakeRotation(rotation + rgr.rotation);

    

    if (rgr.state == UIGestureRecognizerStateEnded || rgr.state == UIGestureRecognizerStateCancelled || rgr.state == UIGestureRecognizerStateFailed) {

        //旋转结束,记录本次旋转最后,到底便宜了多少

        rotation = rgr.rotation;

    }

}




捏合手势:

- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];    

    imageView.userInteractionEnabled  = YES;

    [self.view addSubview:imageView];

    [imageView release];



    

    UIPinchGestureRecognizer * pgr = [[UIPinchGestureRecognizer allocinitWithTarget:self action:@selector(pinch:)];

    [imageView addGestureRecognizer:pgr];

    [pgr release];


}


//捏合响应

- (void)pinch:(UIPinchGestureRecognizer *)pgr

{

    //记录当前捏合比

    static CGFloat currentScale = 1;

    if (pgr.state == UIGestureRecognizerStateChanged) {

        pgr.view.transform = CGAffineTransformMakeScale(pgr.scale, pgr.scale);

    } else if (pgr.state != UIGestureRecognizerStateBegan) {

        currentScale = pgr.scale;

    } else if (pgr.state == UIGestureRecognizerStateBegan) {

        pgr.scale = currentScale;

    }

}




捏合与旋转

- (void)viewDidLoad

{

    [super viewDidLoad];

    // Do any additional setup after loading the view.

    UIImageView * imageView = [[UIImageView allocinitWithFrame:CGRectMake(100, 100, 100, 200)];

    imageView.image = [UIImage imageNamed:@"10_1.jpg"];

    

    //同时添加旋转和捏合两个手势

    UIPinchGestureRecognizer * pgr = [[UIPinchGestureRecognizer allocinitWithTarget:self action:@selector(pinch:)];

    UIRotationGestureRecognizer * rgr = [[UIRotationGestureRecognizer allocinitWithTarget:self action:@selector(rotation:)];

    

    //设置关于手势的代理

    pgr.delegate = self;

    rgr.delegate = self;

    

    [imageView addGestureRecognizer:pgr];

    [imageView addGestureRecognizer:rgr];

    

    imageView.userInteractionEnabled = YES;

    [self.view addSubview:imageView];

    

    [imageView release];

    [rgr release];

    [pgr release];

}



#pragma mark - 手势的响应

//捏合

- (void)pinch:(UIPinchGestureRecognizer *)pgr

{

    static CGFloat lastScale = 1;

    pgr.view.transform = CGAffineTransformScale(pgr.view.transform, pgr.scale / lastScale, pgr.scale / lastScale);

    lastScale = pgr.scale;

}


//旋转

- (void)rotation:(UIRotationGestureRecognizer *)rgr

{

    static CGFloat lastRotation = 0;

    rgr.view.transform = CGAffineTransformRotate(rgr.view.transform, rgr.rotation - lastRotation);

    lastRotation = rgr.rotation;

}



//实现代理方法

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer

{

    //一个参数是一个手势,另一个参数是另一个手势,返回真,允许同时响应两个手势,返回假不允许。

    return YES;

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值