Ограничение движения UIPanGestureRecognizer - PullRequest
2 голосов
/ 07 февраля 2012

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

- (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];
}

Спасибо за любую помощь.

Ответы [ 3 ]

7 голосов
/ 07 февраля 2012

Так что просто проверьте, будет ли новая координата 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;
}
2 голосов
/ 22 ноября 2012

Это прекрасно работает для меня.

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

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

спасибо,

Навин Шань

0 голосов
/ 07 февраля 2012

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

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