码迷,mamicode.com
首页 > 移动开发 > 详细

iOS开篇——UI之UIGestureRecogzier_手势

时间:2015-11-29 22:54:38      阅读:445      评论:0      收藏:0      [点我收藏+]

标签:

一.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 }

 

iOS开篇——UI之UIGestureRecogzier_手势

标签:

原文地址:http://www.cnblogs.com/gwkiOS/p/5005744.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!