2012-12-14 6 views
5

UIView가 있습니다. 화면을 위아래로 이동하려고 시도하지만,보기가 정상 위치에있을 때보기를 아래로 끌 수 없도록 팬하도록 설정할 수 있습니다 (0, 0)범위 외가 감지되면 팬 제스처 사용 안 함

인식기의 중심이보기의 높이의 절반이 아니지만보기가 움직일 수없고 중심이 항상 높이의 절반 (이 경우 230) 일 때 감지하려고했습니다.

아이디어가 있으십니까?

- (IBAction)panDetected:(UIPanGestureRecognizer *)recognizer { 
    CGPoint translation = [recognizer translationInView:self.view]; 
    NSLog(@"\ncenter.y: %f\ntranslation.y: %f\n", recognizer.view.center.y, translation.y); 
    if (recognizer.view.center.y > ([[UIScreen mainScreen] bounds].size.height - 20)/2) { 
      return; 
    } 
    recognizer.view.center = CGPointMake(recognizer.view.center.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 
} 
+1

recognizer.view.center = CGPointMake (recognizer.view.center.x, MAX (recognizer.view.center.y + translation.y, 230)); – Rich86man

답변

0
recognizer.view.center = CGPointMake(recognizer.view.center.x, MAX(recognizer.view.center.y + translation.y, ([[UIScreen mainScreen] bounds].size.height - 20)/2)); 
0

수동으로 포인트가 뷰의 범위 내에 있는지 계산하는 대신

CGPoint translation = [recognizer translationInView:self.view]; 
if (translation.x+recognizer.view.frame.origin.x<0||translation.y+recognizer.view.frame.origin.y<0) 
    { 
     return; 
    } 

recognizer.view.center = CGPointMake(recognizer.view.center.x, 
            recognizer.view.center.y + translation.y); 
[recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 
1
CGPoint translation = [recognizer translationInView:self.view]; 
CGPoint finalpoint = CGPointMake(recognizer.view.center.x + translation.x, recognizer.view.center.y+ translation.y); 

//limit the boundary  
if ((recognizer.view.frame.origin.x>0 && translation.x > 0) || (recognizer.view.frame.origin.x + recognizer.view.frame.size.width<=320 && translation.x < 0)) 
    finalpoint.x = recognizer.view.center.x; 

if ((recognizer.view.frame.origin.y>0 && translation.y > 0) || (recognizer.view.frame.origin.y + recognizer.view.frame.size.height<=self.view.frame.size.height && translation.y < 0)) 
    finalpoint.y = recognizer.view.center.y; 

//set final position 
recognizer.view.center = finalpoint; 
[recognizer setTranslation:CGPointZero inView:self.view]; 
3

을 시도, CGRectContainsPoint(rect, point)를 사용합니다. 이것은 나를 위해 작동 무엇이며,이 짧고 더 읽기 때문에 나는 그것을 좋아하지 :

func handlePan(pan: UIPanGestureRecognizer) { 
    switch pan.state { 
    case .Began: 
     if CGRectContainsPoint(self.pannableView.frame, pan.locationInView(self.pannableView)) { 
      // Gesture started inside the pannable view. Do your thing. 
     } 
}