zoukankan      html  css  js  c++  java
  • 手势

    效果

    细节

    1.UITouch

    #import "ViewController_0.h"
    
    @interface ViewController_0 ()
    
    @property (nonatomic, strong)UILabel *label;
    
    @end
    
    @implementation ViewController_0
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        self.label                   = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
        self.label.backgroundColor   = [UIColor yellowColor];
        self.label.layer.borderWidth = 1;
        [self.view addSubview:self.label];
        
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"拖动方块";
        [textlabel sizeToFit];
        textlabel.font     = [UIFont systemFontOfSize:12];
        [self.view addSubview:textlabel];
    }
    
    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {
    
        //1.拿到手势
        UITouch *touch = [touches anyObject];
        
        //2.拿到touch 所在view的坐标
        CGPoint point = [touch locationInView:self.view];
        
        //3.让label拿到坐标
        self.label.center = point;
        
        NSLog(@"1.手指接触到了屏幕");
    }
    
    - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {
    
        //1.拿到手势
        UITouch *touch = [touches anyObject];
        
        //2.拿到touch 所在view的坐标
        CGPoint point = [touch locationInView:self.view];
        
        //3.让label拿到坐标
        self.label.center = point;
        
        NSLog(@"2.手指在屏幕上移动");
    }
    
    - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {
    
         NSLog(@"3.手指刚离开屏幕");
    }
    
    - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event {
    
        NSLog(@"4.手势失效了");
    }
    
    @end

    2.UITapGestureRecognizer

    #import "ViewController_1.h"
    
    @interface ViewController_1 ()
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_1
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
    
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"电脑上操作tap手势 alt +shift 需要连续点击次数2次";
        [textlabel sizeToFit];
        textlabel.font     = [UIFont systemFontOfSize:12];
        [self.view addSubview:textlabel];
        
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(100, 150, 100, 100)];
        self.label.backgroundColor        = [UIColor orangeColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"0";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
        
        // 1.创建tap手势
        UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(labelTap:)];
        tap.numberOfTapsRequired    = 2; //需要轻轻点击的次数
        tap.numberOfTouchesRequired = 2;//需要的手指数量 :2根手指alt +shift 需要匹配点击次数2次(其实直接用默认的就好)
        [self.label addGestureRecognizer:tap];
    }
    
    - (void)labelTap:(UITapGestureRecognizer *)tap {
    
        int num = [self.label.text intValue];
        num++;
        self.label.text = [NSString stringWithFormat:@"%d",num ];
    }
    
    @end

    3.UILongPressGestureRecognizer

    #import "ViewController_2.h"
    
    @interface ViewController_2 () <UIGestureRecognizerDelegate>
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_2
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"long长按手势";
        [textlabel sizeToFit];
        textlabel.font     = [UIFont systemFontOfSize:12];
        [self.view addSubview:textlabel];
        
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(40, 150, 200, 150)];
        self.label.backgroundColor        = [UIColor grayColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"0";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
        
        UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressAction:)];
        longPress.numberOfTapsRequired          = 1;
        longPress.numberOfTouchesRequired       = 1;
        longPress.minimumPressDuration          = 1.0;
        longPress.delegate   = self;
        [self.label addGestureRecognizer:longPress];
    }
    
    - (void)longPressAction:(UILongPressGestureRecognizer *)longPress {
    
        if(longPress.state == UIGestureRecognizerStateBegan) {
            
            NSLog(@"手势状态开始");
            
        } else if(longPress.state == UIGestureRecognizerStateEnded) {
            
            NSLog(@"手势状态结束");
        
        } else if(longPress.state == UIGestureRecognizerStateChanged) {
            
            NSLog(@"手势状态改变");
            
            NSInteger num = [self.label.text integerValue];
            num ++;
            self.label.text = [NSString stringWithFormat:@"%ld",(long)num];
        }
    }
    
    @end 

    4.UISwipeGestureRecognizer

    #import "ViewController_3.h"
    
    @interface ViewController_3 ()
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_3
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
     
        UILabel *textlabel      = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text          = @"swipe手势 向右滑动➕1,你也可以设置左划上划下划";
        textlabel.numberOfLines = 0;
        textlabel.font          = [UIFont systemFontOfSize:12];
        [self.view addSubview:textlabel];
        
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(100, 150, 100, 100)];
        self.label.backgroundColor        = [UIColor grayColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"0";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
    
        UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(swipeAction:)];
        swipeGesture.direction                 = UISwipeGestureRecognizerDirectionRight;//默认就是向右划
        [self.label addGestureRecognizer:swipeGesture];
    }
    
    -(void)swipeAction:(UISwipeGestureRecognizer *)swipe {
    
        if (swipe.direction == UISwipeGestureRecognizerDirectionLeft) {
            
            NSLog(@"现在响应左划手势");
            
        } else if (swipe.direction == UISwipeGestureRecognizerDirectionRight) {
            
            NSLog(@"现在响应右划手势");
            
            NSInteger num   = [self.label.text integerValue];
            num ++;
            self.label.text = [NSString stringWithFormat:@"%ld",(long)num];
            
        } else if (swipe.direction == UISwipeGestureRecognizerDirectionUp) {
            
            NSLog(@"现在响应上划手势");
            
        } else if (swipe.direction == UISwipeGestureRecognizerDirectionDown) {
            
            NSLog(@"现在响应下划手势");
        }
    }
    
    @end

     5.UIPanGestureRecognizer

    #import "ViewController_4.h"
    
    @interface ViewController_4 ()
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_4
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"pan手势,拖动方块";
        [textlabel sizeToFit];
        textlabel.font     = [UIFont systemFontOfSize:12];
        [self.view addSubview:textlabel];
    
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
        self.label.backgroundColor        = [UIColor grayColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"0";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
    
        UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panAction:)];
        [self.label addGestureRecognizer:pan];
    }
    
    - (void)panAction:(UIPanGestureRecognizer *)pan {
        
        CGPoint offset    = [pan  locationInView:self.view];
        self.label.center = offset;
    }
    
    @end

    6.UIRotationGestureRecognizer

    #import "ViewController_5.h"
    
    @interface ViewController_5 ()
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_5
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"模拟器测试旋转手势时,按住 option键,再用触摸板或鼠标操作";
        textlabel.font     = [UIFont systemFontOfSize:12];
        textlabel.numberOfLines = 0;
        [self.view addSubview:textlabel];
    
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(40, 200, 200, 50)];
        self.label.backgroundColor        = [UIColor grayColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"we are friends";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
        
        //(模拟器测试捏合和旋转手势时,按住 option 键,再用触摸板或鼠标操作)
        UIRotationGestureRecognizer *rotation = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotationAction:)];
        [self.view addGestureRecognizer:rotation];
    
    }
    
    - (void)rotationAction:(UIRotationGestureRecognizer *)rotation {
        
        self.label.transform = CGAffineTransformRotate(self.label.transform, rotation.rotation);
        rotation.rotation = 0; // 这个很重要!!!!!
    
    //    static float  orginState;
    //    
    //    self.label.transform = CGAffineTransformMakeRotation(rotation.rotation + orginState);
    //    
    //    if (rotation.state == UIGestureRecognizerStateEnded) {
    //        
    //        orginState = orginState + rotation.state;
    //        self.label.transform = CGAffineTransformMakeRotation(rotation.rotation);
    //    }
    }
    
    @end

    7.UIPinchGestureRecognizer

    #import "ViewController_6.h"
    
    @interface ViewController_6 ()
    
    @property (nonatomic, strong) UILabel *label;
    
    @end
    
    @implementation ViewController_6
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
      
        UILabel *textlabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 80, 200, 45)];
        textlabel.text     = @"模拟器测试捏合手势时,按住 option键,再用触摸板或鼠标操作";
        textlabel.font     = [UIFont systemFontOfSize:12];
        textlabel.numberOfLines = 0;
        [self.view addSubview:textlabel];
        
        self.label                        = [[UILabel alloc] initWithFrame:CGRectMake(100, 250, 80, 80)];
        self.label.backgroundColor        = [UIColor grayColor];
        self.label.userInteractionEnabled = YES;
        self.label.text                   = @"0";
        self.label.textAlignment          = NSTextAlignmentCenter;
        [self.view addSubview:self.label];
        
    //    (模拟器测试捏合和旋转手势时,按住 option 键,再用触摸板或鼠标操作)
        UIPinchGestureRecognizer * pinch = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(pichGesture:)];
        [self.view addGestureRecognizer:pinch];
    }
    
    - (void)pichGesture:(UIPinchGestureRecognizer *)pinch {
        
        static float originScale = 1;
        
        //手势缩放返回的scale  是相对于上一次的
        self.label.transform = CGAffineTransformMakeScale(pinch.scale * originScale , pinch.scale*originScale);
        
        if (pinch.state == UIGestureRecognizerStateEnded) {
            
            originScale = originScale * pinch.scale;
        }
    }
    
    @end
  • 相关阅读:
    Windows7,Ubuntu双系统,用MBR引导
    把Adblock Plus的过滤规则应用到IE9
    Linux shell学习
    vxworks下面网络连接调试的搭建
    uboot网卡成功识别
    uboot功能扩展篇
    uboot终于显示串口信息了
    uboot解决flash failed无限挂起的问题
    问题解决随笔
    琐事皆休,开始找工作~
  • 原文地址:https://www.cnblogs.com/makingitbest/p/6439303.html
Copyright © 2011-2022 走看看