触摸滚动视图的幻灯片时暂停计时器?

时间:2018-08-29 05:38:30

标签: ios swift uikit

我正在尝试在滚动视图中自动滚动幻灯片。我实际上是在入职屏幕上这样做的。 但是,我希望计时器在用户触摸幻灯片时暂停一会儿,并在他移开手指时重新开始。

我正在做类似的事情,但这在我问的情况下不起作用:

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 :(得分:0)

我认为您应该添加一些标记,例如

var isSlideTouched = false

在手势识别器中添加

isSlideTouched = true

以及autoScroll()中的一些代码

@objc func autoScroll() {
    if isSlideTouched {
        isSlideTouched = false
        return
    }