2016-10-18 4 views
0

У меня есть tableView с panGesture.
Я могу скопировать этот tableView из нижней части экрана по вертикали.
Однако, я хочу, чтобы panGesture продолжил с определенной скоростью, чтобы получить эффект scrollView при панорамировании вверх/вниз.Назначить правильную скорость для движения жесты iOS?

Что происходит, так это то, что скобки tableView очень быстро перемещаются вверх или вниз без каких-либо признаков остановки.

Вот что я сделал до сих пор:

-(void)handlePanWithVelocity:(UIPanGestureRecognizer *)gestureRecognizer{ 

    CGPoint displacement; 
    CGPoint velocity = [gestureRecognizer velocityInView:self.mapView]; 
    switch (gestureRecognizer.state) { 
     case UIGestureRecognizerStateBegan:{ 
      break; 
     }; 
     case UIGestureRecognizerStateChanged:{ 
      CGPoint translation = [gestureRecognizer translationInView:self.view]; 
      displacement = (isVerticalPan) ? CGPointMake(0, translation.y) : CGPointMake(translation.x, 0); 
      mytableView.transform = CGAffineTransformMakeTranslation(displacement.x, displacement.y); 
      break; 
     }; 
     case UIGestureRecognizerStateEnded: { 
      displacement.y = displacement.y + velocity.y; 
      [UIView animateWithDuration:1 animations:^{ 
       mytableView.transform = CGAffineTransformMakeTranslation(displacement.x, displacement.y); 
      }]; 
      break; 
     }; 
     case UIGestureRecognizerStatePossible:break; 
     case UIGestureRecognizerStateCancelled:break; 
     case UIGestureRecognizerStateFailed:break; 
    } 

} 

Что можно сделать, чтобы улучшить текущее поведение?

ответ

0

Дело в том, что вы не измеряете время, необходимое для перемещения в первую очередь. Поскольку скорость x/t вам нужно настроить продолжительность анимации UIView. Вы должны измерить время между обратными вызовами Rec Recognizer и затем вычислить скорость.

глобальные переменные:

double velocity; 
NSDate *date; 

, а затем:

-(void)handlePanWithVelocity:(UIPanGestureRecognizer *)gestureRecognizer{ 

    CGPoint displacement; 
    CGPoint velocity = [gestureRecognizer velocityInView:self.mapView]; 
    switch (gestureRecognizer.state) { 
     case UIGestureRecognizerStateBegan:{ 
      break; 
     }; 
     case UIGestureRecognizerStateChanged:{ 


      CGPoint translation = [gestureRecognizer translationInView:self.view]; 
      displacement = (isVerticalPan) ? CGPointMake(0, translation.y) : CGPointMake(translation.x, 0); 
      mytableView.transform = CGAffineTransformMakeTranslation(displacement.x, displacement.y); 

      if(date){ 
       double timePassed_ms = [date timeIntervalSinceNow] * -1000.0; 
       velocity = displacement.y/timePassed_ms; 
      } 


      date = [NSDate date]; 
      break; 
     }; 
     case UIGestureRecognizerStateEnded: { 
      displacement.y = displacement.y + velocity.y; 
      [UIView animateWithDuration:1 animations:^{ 
       mytableView.transform = CGAffineTransformMakeTranslation(0, velocity); 
      }]; 
      break; 
     }; 
     case UIGestureRecognizerStatePossible:break; 
     case UIGestureRecognizerStateCancelled:break; 
     case UIGestureRecognizerStateFailed:break; 
    } 

} 

Я не тестировать код, но вы получите общее представление.

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