Таймер паузы при касании слайда прокрутки? - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь автоматически прокрутить слайды в моем представлении прокрутки. Я на самом деле делаю это для своих экранов. Однако я хочу, чтобы таймер на некоторое время остановился, когда пользователь коснулся слайдов, и снова начал то же самое, когда убрал палец.

Я делаю что-то подобное, но это не работает для случая, о котором я спрашиваю:

in viewDidLoad -
     timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)


@objc func autoScroll() {
        let totalPossibleOffset = CGFloat(topImages.count - 1) * self.view.bounds.size.width
        if offSet == totalPossibleOffset {
            //offSet = 0 // come back to the first image after the last image
            //timer.invalidate()
        }
        else {
            offSet += self.view.bounds.size.width
        }
        DispatchQueue.main.async() {
            UIView.animate(withDuration: 0.3, delay: 0, options: UIViewAnimationOptions.curveLinear, animations: {
                self.scrollView.contentOffset.x = CGFloat(self.offSet)
            }, completion: nil)
        }
    }
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let page = scrollView.contentOffset.x / scrollView.frame.size.width
        pageControl.currentPage = Int(page)
        self.offSet = page * scrollView.frame.size.width // this updates offset value so that automatic scroll begins from the image you arrived at manually
    }

Также у меня есть второй вопрос: как мне снова запустить интервал таймера, когда пользователь вручную переключается на другое. Прямо сейчас, когда пользователь перемещается к другому слайду до 4 секунд (поскольку для перехода к другому слайду требуется 4 секунды), скажем, 2 секунды, он переходит на следующую страницу там через 4-2 = 2 секунды вместо 4 секунд, как ожидается.

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, вы должны добавить флаг, например

var isSlideTouched = false

В распознаватель жестов добавить

isSlideTouched = true

И некоторый код в autoScroll ()

@objc func autoScroll() {
    if isSlideTouched {
        isSlideTouched = false
        return
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...