2012-12-14 13 views
5

Mam UIView Próbuję poruszać się w górę iw dół ekranu, jednak chcę go tylko przesuwać tak, aby nie można było przeciągnąć widoku, gdy jest on w normalnej pozycji (0, 0)Wyłączanie pan Gest, jeśli wykryto wykrycie poza granicami

Próbowałem wykryć, kiedy środek czytnika nie jest w połowie wysokości obrazu, jednak widok jest nieruchomy, a środek ma zawsze połowę wysokości (w tym przypadku 230).

Wszelkie pomysły?

- (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 + tłumaczenie.y, 230)); – Rich86man

Odpowiedz

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

spróbować

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

Zamiast ręcznie computing czy punkty są w granicach widoku, użyj CGRectContainsPoint(rect, point). To, co działa na mnie, a ja lubię, bo to krótsze i bardziej czytelne:

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. 
     } 
} 
Powiązane problemy