• 手势。。。


    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 }
  • 相关阅读:
    Android 懒加载简单介绍
    Android 使用RxJava实现一个发布/订阅事件总线
    Android 第三方库RxLifecycle使用
    Android 使用Retrofit2.0+OkHttp3.0实现缓存处理+Cookie持久化第三方库
    代码雨
    我的第一个博客(My first blog)
    merge法
    如何使用git将remote master上的内容merge 到自己的开发分支上  &  以及将自己分支的内容merge到remote master上...
    git 解决冲突
    Mac安装和破解激活Charles
  • 原文地址:https://www.cnblogs.com/Angelone/p/4388209.html
Copyright © 2020-2023  润新知