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>
相关新闻>>
- 发表评论
-
- 最新评论 更多>>