UIGestureRecognizer是一個(gè)定義基本手勢的抽象類颜及,具體包含:
1掖肋、拍擊UITapGestureRecognizer (任意次數(shù)的拍擊)
2仆葡、向里或向外捏UIPinchGestureRecognizer (用于縮放)
3、搖動(dòng)或者拖拽UIPanGestureRecognizer (拖動(dòng))
4志笼、擦碰UISwipeGestureRecognizer (以任意方向)
5沿盅、旋轉(zhuǎn)UIRotationGestureRecognizer (手指朝相反方向移動(dòng))
6、長按UILongPressGestureRecognizer (長按)
本文主要使用到的是拖拽手勢:UIPanGestureRecognizer
限制方法:
-(void)doMoveAction:(UIPanGestureRecognizer *)recognizer{
// Figure out where the user is trying to drag the view.
CGPoint translation = [recognizer translationInView:self.view];
CGPoint newCenter = CGPointMake(recognizer.view.center.x+ translation.x,
recognizer.view.center.y + translation.y);// 限制屏幕范圍:
newCenter.y = MAX(recognizer.view.frame.size.height/2, newCenter.y);
newCenter.y = MIN(self.view.frame.size.height - recognizer.view.frame.size.height/2, newCenter.y);
newCenter.x = MAX(recognizer.view.frame.size.width/2, newCenter.x);
newCenter.x = MIN(self.view.frame.size.width - recognizer.view.frame.size.width/2,newCenter.x);
recognizer.view.center = newCenter;
[recognizer setTranslation:CGPointZero inView:self.view];
}
也可以使用UITouch來實(shí)現(xiàn):
當(dāng)手指接觸到屏幕纫溃,不管是單點(diǎn)觸摸還是多點(diǎn)觸摸腰涧,事件都會(huì)開始,直到用戶所有的手指都離開屏幕紊浩。期間所有的UITouch對象都被包含在UIEvent事件對象中窖铡,由程序分發(fā)給處理者。事件記錄了這個(gè)周期中所有觸摸對象狀態(tài)的變化坊谁。
限制方法如下:
BOOL isMove;
CGPoint legend_point;
-(void)touchesBegan:(NSSet<uitouch *> *)touches withEvent:(UIEvent *)event{
[super touchesBegan:touches withEvent:event];
isMove = NO;
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
if (CGRectContainsPoint(V2.frame, point)) {
legend_point = [touch locationInView:V2];
isMove = YES;
}
}
-(void)touchesMoved:(NSSet<uitouch *> *)touches withEvent:(UIEvent *)event{
[super touchesMoved:touches withEvent:event];
if (!isMove) {
return;
}
@autoreleasepool {
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView:self.view];
//轉(zhuǎn)化成相對的中心
point.x += V2.frame.size.width/2.0f - legend_point.x;
point.y += V2.frame.size.height/2.0f - legend_point.y;
// 限制范圍
if (point.x < V2.frame.size.width / 2.0f) {
point.x = V2.frame.size.width / 2.0f;
}
if (point.y < V2.frame.size.height / 2.0f) {
point.y = V2.frame.size.height / 2.0f;
}
if (point.x > self.view.frame.size.width - V2.frame.size.width / 2.0f) {
point.x = self.view.frame.size.width - V2.frame.size.width / 2.0f;
}
if (point.y > self.view.frame.size.height - V2.frame.size.height / 2.0f) {
point.y = self.view.frame.size.height - V2.frame.size.height / 2.0f;
}
V2.center = point;
}
}