UIPanGestureRecognizer使用小结

来源:未知 责任编辑:责任编辑 发表时间:2014-02-18 03:21 点击:
UIPanGestureRecognizer是UIGestureRecognizer类的一个扩展类,其扩展类有UITapGestureRecognizer,UIPinchGestureRecognizer,UIRotationGestureRecognizer,UISwipeGestureRecognizer,UIPanGestureRecognizer,UILongPressGestureRecognizer。 p> 

p>借助这些类,可以实现UIView对象的一些操作如对象放大缩小,移动,旋转,滑动,轻击等。再也不用去重写UIView的touchBegin等方法来实现这些功能。

p> 

p>知识点:

p>UIGestureRecognizer是一个定义基本手势的抽象类,具体什么手势,在以下子类中包含:

p>    1、拍击UITapGestureRecognizer (任意次数的拍击)  

p>    2、向里或向外捏UIPinchGestureRecognizer (用于缩放)  

p>    3、摇动或者拖拽UIPanGestureRecognizer (拖动) 

p>    4、擦碰UISwipeGestureRecognizer (以任意方向)  

p>    5、旋转UIRotationGestureRecognizer (手指朝相反方向移动)  

p>    6、长按UILongPressGestureRecognizer (长按)

p> 

p>这些操作的目的都是用来修改UIView对象的frame,center,bounds属性,还有一个Transform属性。

p> 

p>我写了一个例子,在UIView和UITableView上分别添加UIPanGestureRecognizer,实现两个对象在手指按住对象于屏幕中拖动的效果。

p> 

p>声明一个UIPanGestureRecognizer对象,添加到UIView对象上去。UIView类有这样的方法用来动态添加和删除UIPanGestureRecognizer对象。

p> 

p>UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePan:)];

p>[testPanView addGestureRecognizer:panRecognizer];

p> 

p>UIView管理手势识别器的方法有:

p>– addGestureRecognizer:

p>– removeGestureRecognizer:

p>  gestureRecognizers  property

p>– gestureRecognizerShouldBegin:

p> 

p> 

p>我在viewDidAppear:方法中,动态添加视图和手势识别器。然后,实现识别器需要操作的两个方法,用来移动视图对象。

p>在这两个方法中最终的方法是这个 CGPoint translatedPoint = [recognizer translationInView:self.view];

p> 

p>每一次拖动操作状态,都会获取到translatedPoint,从开始到结束。它是一个绝对值,可以看着在”self.view“对应的坐标体系中,拖动的视图对象center的移动开始和结束的点差。

p>最简单的处理过程是这样:

p>    CGPoint translatedPoint = [recognizer translationInView:self.view];

p>    CGFloat x = recognizer.view.center.x + translatedPoint.x;

p>    CGFloat y = recognizer.view.center.y + translatedPoint.y;

p>    recognizer.view.center = CGPointMake(x, y);

p>    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view];

p> 

p>首先获取到移动点的值,然后算一下视图的center值,相加一下,就得到在self.view坐标体系中,视图该移动到那个center上,一次结束就清零一次。

p>因为拖动操作持续进行,所以,这个过程会持续执行。

p> 

p>稍微复杂点的处理过程,会捕获到拖动开始,移动,结束等几个状态下的translatedPoint的值。然后做一下逻辑处理,如视图不能溢出self.view的坐标系中,如在结束时会根据方向自动滑动到某个位置。可以在handlePan2:方法中找到这些逻辑的实现代码。

p> 

p>    
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Lexical or Preprocessor Issue 'xxx.h
  • ios学习笔记(二)xcode 4.3.2下实现基本交互
  • ios版本的helloworld
  • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
  • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
  • UITableView一些方法
  • IOS类似iphone通讯录TableView的完整demo【附源码】
  • [iPhone中级]iPhone团购信息客户端的开发 (二)
  • iphone(object-c)内存管理(1)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1