zoukankan      html  css  js  c++  java
  • iOS开篇——UI之UIGestureRecogzier_手势

    一.UITouch

     1 //任何视图都可以触发此方法
     2 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     3     NSLog(@"视图被触摸了");
     4 }
     5 
     6 - (void)touchesCancelled:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
     7     NSLog(@"因意外停止了触摸");
     8 }
     9 
    10 - (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    11     NSLog(@"结束触摸");
    12 }
    13 
    14 //可以获得手指在视图移动的位置
    15 - (void)touchesMoved:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    16 //    CGFloat floct = [touches anyObject];
    17     //手指触摸的点
    18     NSLog(@"%@",[touches anyObject]);
    19     //移动到的所有的点
    20 //    NSLog(@"%@",[touches allObjects]);
    21 }

    二.UITapGestureRecognizer  点击手势

    创建一个view 创建手势  使用addGestureRecognizer:方法 将手势添加到view上

     1 UIView * view = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 200, 200)];
     2     view.backgroundColor = [UIColor redColor];
     3     
     4     //创建一个点击手势
     5     UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
     6     //设置点击次数
     7     tap.numberOfTapsRequired = 1;
     8     //把手势添加到控件上
     9     [view addGestureRecognizer:tap];
    10     
    11     UITapGestureRecognizer * tap1 = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(onClicked:)];
    12     tap1.numberOfTapsRequired = 2;
    13     [view addGestureRecognizer:tap1];
    14     
    15     
    16     
    17     [self.view addSubview:view];

    三.UILongPressGestureRecognizer  长按手势

     1 UIView * view = [[UIView alloc]initWithFrame:CGRectMake(20, 100, 200, 200)];
     2     view.backgroundColor = [UIColor redColor];
     3     
     4     //创建一个长按手势
     5     UILongPressGestureRecognizer * longPress = [[UILongPressGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
     6     
     7     //设置长按最短时间
     8     longPress.minimumPressDuration = 1;
     9     //设置长按手指数量
    10     longPress.numberOfTouchesRequired = 2;
    11 
    12     //把手势添加到控件上
    13     [view addGestureRecognizer:longPress];

    四.UISwipeGestureRecognizer 滑动手势

     

    UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 100, 30)];
        label.textColor = [UIColor grayColor];
        label.text = @"滑动手势";
        
        //创建滑动手势
        UISwipeGestureRecognizer * swipe = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
        //添加到控件上
        [label addGestureRecognizer:swipe];
        
        //打开label的交互 默认为NO  是NO的时候 手势不能被响应
        label.userInteractionEnabled = YES;
    
        
        //设置滑动方向 每一个手势只能是一个方向
        //如果需要多方向  需要多次创建
        swipe.direction = UISwipeGestureRecognizerDirectionDown;
        /*
         typedef NS_OPTIONS(NSUInteger, UISwipeGestureRecognizerDirection) {
         UISwipeGestureRecognizerDirectionRight = 1 << 0,
         UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
         UISwipeGestureRecognizerDirectionUp    = 1 << 2,
         UISwipeGestureRecognizerDirectionDown  = 1 << 3
         };
         */
        
        
        //设置滑动手指数量
        swipe.numberOfTouchesRequired = 1;
        
        [self.view addSubview:label];

    五.UIPanGestureRecognizer 拖动手势

     1 - (void)createLabel{
     2     UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 100, 30)];
     3     label.textColor = [UIColor groupTableViewBackgroundColor];
     4     label.text = @"拖动手势";
     5     label.tag = 1;
     6     //创建拖动手势
     7     UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
     8     //添加到控件上
     9     [label addGestureRecognizer:pan];
    10     
    11     //打开label的交互 默认为NO  是NO的时候 手势不能被响应
    12     label.userInteractionEnabled = YES;
    13     
    14     
    15     
    16     [self.view addSubview:label];
    17 }
    18 
    19 - (void)onClick:(UIPanGestureRecognizer *)pan{
    20     static CGPoint offPoint;
    21     
    22     UILabel * label = [self.view viewWithTag:1];
    23     //获得手势的偏移量
    24     CGPoint point  = [pan translationInView:self.view];
    25     
    26     if (pan.state == UIGestureRecognizerStateBegan) {
    27         offPoint = label.center;
    28         return;
    29     }
    30     
    31     label.center = CGPointMake(point.x+offPoint.x, point.y+offPoint.y);
    32 }

    六.UIRotationGestureRecognizer 旋转手势

     1 - (void)createLabel{
     2     UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 200, 60)];
     3     label.textColor = [UIColor groupTableViewBackgroundColor];
     4     label.text = @"旋转手势";
     5     label.tag = 1;
     6     label.textAlignment = NSTextAlignmentCenter;
     7     label.adjustsFontSizeToFitWidth = YES;
     8     
     9     label.font = [UIFont systemFontOfSize:60];
    10     //创建旋转手势
    11     UIRotationGestureRecognizer * rotation = [[UIRotationGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
    12     //添加到控件上
    13     [label addGestureRecognizer:rotation];
    14     
    15     //打开label的交互 默认为NO  是NO的时候 手势不能被响应
    16     label.userInteractionEnabled = YES;
    17     [self.view addSubview:label];
    18 }
    19 
    20 - (void)onClick:(UIRotationGestureRecognizer *)rotation{
    21     UILabel * label = [self.view viewWithTag:1];
    22     
    23     static CGFloat offFloat;
    24     
    25     label.transform = CGAffineTransformMakeRotation(rotation.rotation +offFloat);
    26     //结束时把上次旋转角度的记录下来
    27     if (rotation.state == UIGestureRecognizerStateEnded) {
    28         offFloat = offFloat + rotation.rotation;
    29     }
    30 }

    七.UIPinchGestureRecognizer 捏合手势

     1 - (void)createLabel{
     2     UILabel * label = [[UILabel alloc]initWithFrame:CGRectMake(50, 100, 200, 60)];
     3     label.textColor = [UIColor groupTableViewBackgroundColor];
     4     label.text = @"捏合手势";
     5     label.tag = 1;
     6     label.textAlignment = NSTextAlignmentCenter;
     7     label.adjustsFontSizeToFitWidth = YES;
     8     
     9     label.font = [UIFont systemFontOfSize:60];
    10     //创建捏合手势
    11     UIPinchGestureRecognizer * pinchGR = [[UIPinchGestureRecognizer alloc]initWithTarget:self action:@selector(onClick:)];
    12     //添加到控件上
    13     [label addGestureRecognizer:pinchGR];
    14     
    15     //打开label的交互 默认为NO  是NO的时候 手势不能被响应
    16     label.userInteractionEnabled = YES;
    17     [self.view addSubview:label];
    18 }
    19 
    20 - (void)onClick:(UIPinchGestureRecognizer *)pinchGR{
    21     UILabel * label = [self.view viewWithTag:1];
    22     static CGFloat offFloat = 1;
    23     label.transform = CGAffineTransformMakeScale(pinchGR.scale*offFloat, pinchGR.scale*offFloat);
    24     //记录结束手势时的缩放比例
    25     if (pinchGR.state == UIGestureRecognizerStateEnded) {
    26         offFloat = offFloat* pinchGR.scale;
    27     }
    28 }
  • 相关阅读:
    Web中路径问题
    post请求乱码
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_10-freemarker静态化测试-基于模板文件静态化
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_09-freemarker基础-内建函数
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_08-freemarker基础-空值处理
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_07-freemarker基础-if指令
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_05-freemarker基础-List指令
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_04-freemarker基础-基础语法种类
    阶段5 3.微服务项目【学成在线】_day04 页面静态化_03-freemarker测试环境搭建
  • 原文地址:https://www.cnblogs.com/gwkiOS/p/5005744.html
Copyright © 2011-2022 走看看