scrollViewDidEndDecelerating вызывается для простого прикосновения - PullRequest
8 голосов
/ 01 декабря 2011

Я реализую UIScrollViewDelegate и много чего с ним делаю.Однако я только что обнаружил раздражающую проблему.

Я ожидаю, что scrollViewDidEndDecelerating: будет вызываться всегда после scrollViewWillBeginDecelerating: .Однако, если я просто касаюсь своего ScrollView (на самом деле я касаюсь кнопки внутри scrollView), scrollViewDidEndDecelerating: вызывается и scrollViewWillBeginDecelerating: не вызывается.

Так как же мне избежать, чтобы scrollViewDidEndDecelerating: вызывался, когда я просто нажимал кнопку внутри моего UIScrollView?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 июля 2017

У меня была та же проблема, я исправил ее, сделав переменную, в которой хранится номер текущей страницы, и сравнил ее с локальной переменной текущей страницы, если они равны, то не продолжаем.

var currentPage : CGFloat = 0.0
var oldPage : CGFloat = 0.0

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView){
    // Test the offset and calculate the current page after scrolling ends

    let pageWidth:CGFloat = scrollView.frame.width
    let currentPage:CGFloat = floor((scrollView.contentOffset.x-pageWidth/2)/pageWidth)+1
    // Change the indicator
    print("that's the self.currentPage \(self.currentPage) and that's the current : \(currentPage)")

    guard  self.currentPage != currentPage else { return }
    oldPage = self.currentPage
    self.currentPage = currentPage;

    print("that's the old \(oldPage) and that's the current : \(currentPage)")

       //Do something
}
1 голос
/ 01 декабря 2011

Создайте элемент BOOL с именем buttonPressed или подобным и инициализируйте его как false в вашем init: методе.

Установите BOOL на true при каждом нажатии ваших кнопок, а затем выполните следующую проверку:

-(void)scrollViewDidEndDecelerating: (UIScrollView*)scrollView
{
    if (!buttonPressed)
    {
        // resume normal processing
    }
    else
    {
        // you will need to decide on the best place to reset this variable.
        buttonPressed = NO;
    }
}
...