手势。。。

UITouch

1.UITouch *touch = [touches anyObject];//找到触摸事件

   if([touch.view isKindOfClass:[UIImageView class]]){

              CGPoint point = [touch locationInView:self.view];//找到点击事件在self.view里的坐标

              CGFloat xMove = point.x - _recordPoint.x;

              CGFloat yMove = point.y - _recordPoint.y;//计算运动轨迹

      touch.view.center = CGPointMake(touch.view.center.x +xMove,touch.view.center.y + yMove);//根据运动轨迹移动到点击到的视图

      _recordPoint = [touch locationInView:self.view];//每次移动以后都修改记录

2.根据点击的次数来监听

   - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event

     {

            UITouch *touch = [touches anyObject];
    
                NSLog(@"====%ld",touch.tapCount);
               //连续点击的次数
    
                 if ([touch.view isKindOfClass:[UIImageView class]]) {
                if (touch.tapCount == 2) {
            CGRect rect = touch.view.frame;
            rect.origin.x -= 5;
            rect.size.width += 10;
            touch.view.frame = rect;
            //修改frame
        }
    }
}

 

各种手势

1.点击手势(类似于btn的点击)

       UITapGestureRecognizer *tapGR = [[UITapgestureRecognizer alloc] initWithTarget:self action:@selector(tapGR:)];

       [view addGestureRecognizer:tapGR];

       - (void)tapGR:(UITapGestureRecognizer *)tapGR

         {

            [self.view bringSubViewToFront:tapGR.view];//将手势对应的view移到最上层

         }

2.移动手势

        UIPanGestureRecognizer *panGR = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGR:)];

        [view addGestureRecognizer:panGR];

 1 - (void)panGR:(UIPanGestureRecognizer *)panGR
 2 {
 3     CGPoint translation = [panGR translationInView:self.view];
 4     //获取手势移动的轨迹
 5     
 6     panGR.view.center = CGPointMake(panGR.view.center.x + translation.x, panGR.view.center.y + translation.y);
 7     //根据手势的轨迹移动view
 8     
 9     [panGR setTranslation:CGPointZero inView:self.view];
10     //每次移动以后都清空手势记录的轨迹
11 }

 

       

3.捏合手势

        UIPinchGestureRecognizer *pinchGR = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGR:)];
         [view addGestureRecognizer:pinchGR];

   

1 - (void)pinchGR:(UIPinchGestureRecognizer *)pinchGR
2 {
3     pinchGR.view.transform = CGAffineTransformScale(pinchGR.view.transform, pinchGR.scale, pinchGR.scale);
4     //让view随着手势的缩放而缩放
5     
6     pinchGR.scale = 1;
7     //缩放以后需要还原手势中记录的倍数
8 }

 

4.旋转手势

        UIRotationGestureRecognizer *rotationGR = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationGR:)];
    [view addGestureRecognizer:rotationGR];

 

1 - (void)rotationGR:(UIRotationGestureRecognizer *)rotationGR
2 {
3     rotationGR.view.transform = CGAffineTransformRotate(rotationGR.view.transform, rotationGR.rotation);
4     //让view随着手势的旋转而旋转
5     
6     rotationGR.rotation = 0;
7     //旋转以后还原记录
8 }

 

5.长按手势

       UILongPressGestureRecognizer *longGR = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longGR:)];
    [view addGestureRecognizer:longGR];

   

 1 - (void)longGR:(UILongPressGestureRecognizer *)longGR
 2 {
 3     NSLog(@"===%ld",longGR.state);
 4     //打印手势的状态(开始响应,改变,结束响应)
 5     
 6     if (longGR.state == UIGestureRecognizerStateBegan) {
 7         //长按手势开始响应时触发
 8         
 9         CABasicAnimation *basicAnimation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
10         //创建一个基础动画
11         
12         basicAnimation.fromValue = [NSNumber numberWithFloat:0.5];
13         basicAnimation.toValue = @2;
14         //从哪里来,到哪里去
15         
16         basicAnimation.autoreverses = YES;
17         //是否以动画方式返回
18         
19         basicAnimation.duration = 0.1;
20         //单次动画时间
21         
22         basicAnimation.repeatCount = 99;
23         //重复次数
24         
25         [longGR.view.layer addAnimation:basicAnimation forKey:@"aa"];
26         //添加动画
27     }
28 }

 

6.轻扫手势(和移动手势有冲突)

        UISwipeGestureRecognizer *swipeGR = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeGR:)];
        //轻扫手势(和pan移动有冲突的)
         swipeGR.direction = UISwipeGestureRecognizerDirectionUp;
        //设置轻扫的方向
         [view addGestureRecognizer:swipeGR];

        如果想实现多个方向的轻扫手势,需要创建多个,然后设置不同的方向。。。。。

       

 1 - (void)swipeGR:(UISwipeGestureRecognizer *)swipeGR
 2 {
 3     CGRect rect = swipeGR.view.frame;
 4     
 5     //判断方向
 6     if (swipeGR.direction == UISwipeGestureRecognizerDirectionUp) {
 7         rect.origin.y -= 5;
 8         rect.size.height += 5;
 9     }
10     
11     //& 按位与判断(这种用法只能是枚举值后面有1<<2这种位操作的)
12     if (swipeGR.direction & UISwipeGestureRecognizerDirectionLeft) {
13         rect.origin.x -= 5;
14         rect.size.width += 5;
15     }
16     
17     swipeGR.view.frame = rect;
18 }

 

posted @ 2015-04-02 19:52  Angelone  阅读(194)  评论(0编辑  收藏  举报