你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS兩種方法限制拖拽手勢的范圍

iOS兩種方法限制拖拽手勢的范圍

編輯:IOS開發基礎

UIGestureRecognizer是一個定義基本手勢的抽象類,具體包含:
  1、拍擊UITapGestureRecognizer (任意次數的拍擊)
  2、向裡或向外捏UIPinchGestureRecognizer (用於縮放)
  3、搖動或者拖拽UIPanGestureRecognizer (拖動)
  4、擦碰UISwipeGestureRecognizer (以任意方向)
  5、旋轉UIRotationGestureRecognizer (手指朝相反方向移動)
  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來實現:
當手指接觸到屏幕,不管是單點觸摸還是多點觸摸,事件都會開始,直到用戶所有的手指都離開屏幕。期間所有的UITouch對象都被包含在UIEvent事件對象中,由程序分發給處理者。事件記錄了這個周期中所有觸摸對象狀態的變化。
限制方法如下:

BOOL isMove;
CGPoint legend_point;
-(void)touchesBegan:(NSSet *)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 *)touches withEvent:(UIEvent *)event{
    [super touchesMoved:touches withEvent:event];
    if (!isMove) {
        return;
    }
    @autoreleasepool {
        UITouch *touch = [touches anyObject];
        CGPoint point = [touch locationInView:self.view];
        //轉化成相對的中心
        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;

    }
}

效果如圖:

1314486-f9cb2fdb7b35d2b4.gif

Demo下載地址:https://github.com/sinceresk/MoveView



文章轉自 neilbee的簡書
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved