2016-05-22 2 views
1

Установка: У меня есть Scroll View, который прекрасно работает как горизонтально, так как UISwipeGestureRecognizer, который вызывает переход к другому виду, когда я красть вниз.Отключить UIScrollView инерция (scrollViewDidEndDecelerating) Swift

Проблема: Если я прокрутки по горизонтали, и я начинаю красть вниз (вертикальная прокрутка отключена) ПОКА скроллинг замедляется, то проведите вниз действие (переход) не выполняется. Он работает только после завершения замедления прокрутки.

enter image description here

Есть ли способ отключить торможение прокрутки (ака инерции), так что мой красть вниз жест может быть обнаружен мгновенно? Возможно, существует обходное решение для принудительного обнаружения UISwipeGestureRecognizer?

Решения в Swift высоко оценены!

ответ

1

UIScrollView имеет pinchGestureRecognizer и panGestureRecognizer .Если у вас есть UISwipeGestureRecognizer , жест, скорее всего, будет признан как UIPanGestureRecognizer.
Вы можете добавить зависимость решить проблему:

scrollView.panGestureRecognizer.requireGestureRecognizerToFail(swipeGesture) 
+0

Это действительно помогло мне достичь того, что я изначально хотел. Спасибо! – theflarenet

0

Вы посмотрели? Deactivate UIScrollView decelerating

ответ

-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ 
[scrollView setContentOffset:scrollView.contentOffset animated:YES]; 
} 

преобразуется в Свифт

func scrollViewWillBeginDecelerating(scrollView: UIScrollView) { 
scrollView.setContentOffset(scrollView.contentOffset, animated: true) 
} 
+0

К сожалению, я попытался это решение несколько минут назад и обнаружил, что это мешает моей 'смахнуть вниз обнаружения UISwipeGestureRecognizer'. Ни один из моих жестов не обнаружен, как только я использую scrollview из-за этого взлома в BeginDecelerating. Возможно, еще один взлом в EndDecelerating как обходной путь? – theflarenet

1

Swift 3:

Чтобы отключить замедленно прокрутки, вы можете попробовать:

func scrollViewWillEndDragging (scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) { 
    targetContentOffset.memory = scrollView.contentOffset 
} 

или изменить это значение:

scrollView.decelerationRate = UIScrollViewDecelerationRateNormal 
// UIScrollViewDecelerationRateFast is the other param 

О ваших gestureRecognizer помехах вы можете вызвать этот метод, чтобы исключить прикосновение от:

func gestureRecognizer(gestureRecognizer: UIGestureRecognizer, shouldReceiveTouch touch: UITouch) -> Bool { 
    // insert here views to exclude from gesture 
    if touch.view!.isDescendantOfView(self.excludeThisView) { 
     return false 
    } 
    return true 
} 
+0

Я не знал о 'scrollViewWillEndDragging', и это выглядит очень интересно. Я попробовал его с 'targetContentOffset.memory = scrollView.contentOffset', и это не повлияло. По какой-то причине мой «gestureRecognizer» по-прежнему задерживается замедлением (или любым отказом) в моем scrollView. Моя цель - разрешить 'gestureRecognizer' выполнять мгновенно, не задерживаясь при любом замедлении прокрутки. – theflarenet

+0

targetContentOffset теперь разрешено var. не может быть изменен –

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