2012-02-07 3 views
2

У меня есть объект UIView, который можно перетаскивать с помощью UIPanGestureRecognizer, но я хочу, чтобы он мог перемещаться вверх по 3/4 экрана. Я не хочу, чтобы это было подрезано, но чтобы добраться до определенной точки и не быть втянутым дальше. То, что я до сих пор позволяет ему двигаться только по оси Y (что желательно).Ограничение движения UIPanGestureRecognizer

- (IBAction)panGesture:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint translation = [recognizer translationInView:self.view]; 
    recognizer.view.center = CGPointMake(recognizer.view.center.x, 
             recognizer.view.center.y + translation.y); 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 
} 

Благодарим за любую помощь.

ответ

7

Так что просто проверьте, будет ли новая координата Y слишком мала. Не меняйте вид, если он будет слишком маленьким:

- (IBAction)panGesture:(UIPanGestureRecognizer *)recognizer 
{ 
    CGPoint translation = [recognizer translationInView:self.view]; 
    [recognizer setTranslation:CGPointMake(0, 0) inView:self.view]; 

    CGPoint center = recognizer.view.center; 
    center.y += translation.y; 
    if (center.y < self.yMin) 
    return; 
    recognizer.view.center = center; 
} 
+0

Это сработало, спасибо. Я сделал yMin int, что требовало 'self-> yMin'. Это лучший способ обойти вещи? –

+0

Звучит как прекрасный способ сделать это. У вас может быть свойство типа 'int'. Вы просто не объявляете его 'keep/assign/strong/weak'. Но если вам не нужно раскрывать его как свойство, вы можете просто использовать ivar. Вы можете получить доступ к ivar, произнеся «yMin». Вам не нужно говорить 'self-> yMin', если у вас нет локальной переменной, также называемой' yMin', которую вы * не хотите получать. –

0

Внесите следующий делегат и проверьте свое состояние внутри него. Возврат YES или NO от этого делегата сделает жест активным и неактивным.

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch; 
2

Его работа отлично подходит для меня.

CGPoint currentTouchPoint = [gesture translationInView:self.bottomView]; 

    if (fabsf(currentTouchPoint.x) > fabsf(currentTouchPoint.y)) { 
     // avoid horizontal movement of pan geuture. 
     return; 
    } 

спасибо,

Нэвин Shan

Смежные вопросы