注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

实现手势识别(三)  

2013-05-09 21:34:50|  分类: ios开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

检测拖拽手势

你希望用户可以通过手指对程序中的 UI 元素进行移动。
注意:
Pan 手势是手指在屏幕上连续的移动;重复一下——轻扫手势是单独的手势。也

就是说 pan 手势识别器的目标方法会被重复的调用(从识别处理的开始直到结束)

利用 UIPanGestureRecognizer 这个手势识别器

 

代码如下:

#import <UIKit/UIKit.h>


@interface ViewController : UIViewController


@property (nonatomic,strong) UIPanGestureRecognizer *panGestureRecognizer;

@property (nonatomic,strong) UILabel *helloWorldLabel;


@end


------------------


#import "ViewController.h"


@interface ViewController ()


@end


@implementation ViewController


- (void) handlePanGestures: (UIPanGestureRecognizer *) paramSender

{

    if (paramSender.state != UIGestureRecognizerStateEnded

        && paramSender.state != UIGestureRecognizerStateFailed)

    {

        CGPoint location = [paramSender locationInView:paramSender.view.superview];

        paramSender.view.center = location;

    }

}


- (void)viewDidLoad

{

    [super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

    self.view.backgroundColor = [UIColor whiteColor];

    CGRect labelFrame = CGRectMake(0.0f, 0.0f, 150.0f, 100.0f);

    self.helloWorldLabel = [[UILabel alloc] initWithFrame:labelFrame];

    self.helloWorldLabel.text = @"Hello World";

    self.helloWorldLabel.backgroundColor = [UIColor blackColor];

    self.helloWorldLabel.textColor = [UIColor whiteColor];

    self.helloWorldLabel.textAlignment = UITextAlignmentCenter;

    self.helloWorldLabel.userInteractionEnabled = YES;

    

    [self.view addSubview:self.helloWorldLabel];

    self.panGestureRecognizer = [[UIPanGestureRecognizer alloc]

                                 initWithTarget:self action:@selector(handlePanGestures:)];

    

    self.panGestureRecognizer.minimumNumberOfTouches = 1;

    self.panGestureRecognizer.maximumNumberOfTouches = 1;

    

    [self.helloWorldLabel addGestureRecognizer:self.panGestureRecognizer];

}




- (void)didReceiveMemoryWarning

{

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


Pan 手势识别器将会调用 handlePanGestures:方法。这个方法在下面的讨论中将进行介绍。 

UIPanGestureRecognizer 这个手势识别器类,就像他的名字一样,可以捕获监测拖动的 手势。一般当拖动手势产生的时候会顺序的经过如下几个状态。

1. UIGestureRecognizerStateBegan 2. UIGestureRecognizerStateChanged 3. UIGestureRecognizerStateEnded

  我们一般会实现手势识别时的处理方法,如下的代码,将会实现利用手指来移动屏幕中
间的一个标签。						

为了能达到移动我们屏幕中的标签,我们需要获取手指在屏幕中的坐标, 并不是在标签中的坐标。因此,我们需要调用 pan gesture recognizer locationInView:方 法,并把我们标签的 superview 作为参数传递进去。

通过使用 locationInView 这个方法,来获取到我们手势的坐标,为了能够捕获到多个手 指的位置,我们就需要使用 locationOfTouch:inView:这个方法。然后通过使用 UIPanGestureRecognizer 这 个 对 象 的 minimumNumberOfTouches maximumNumberOfTouches 参数。你就可以在同一个时间来捕获多个手指的拖拽的动作了。 在我们的实例中,为了能够更好的演示,我们就只添加了一个手指的拖拽动作监听。

当手势产生的时候,并且处于 UIGestureRecognizerStateEnded 这个状态的 时候,反馈出来的坐标 X Y 可能并不是数字类型的,可能是 NAN。因此在这个状态的时 候,我们一边建议不要采用这个状态反馈的坐标值。


  评论这张
 
阅读(52)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017