Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 滚动查看时暂停计时器';滑梯被碰了?_Ios_Swift_Uikit - Fatal编程技术网

Ios 滚动查看时暂停计时器';滑梯被碰了?

Ios 滚动查看时暂停计时器';滑梯被碰了?,ios,swift,uikit,Ios,Swift,Uikit,我正在尝试在滚动视图中自动滚动幻灯片。我实际上是为了我的入职屏幕而这样做的。 但是,我希望当用户触摸幻灯片时计时器暂停一段时间,当用户移开手指时,计时器再次启动 我正在做类似的事情,但这不适用于我所问的情况: in viewDidLoad - timer = Timer.scheduledTimer(timeInterval: 4, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)

我正在尝试在滚动视图中自动滚动幻灯片。我实际上是为了我的入职屏幕而这样做的。 但是,我希望当用户触摸幻灯片时计时器暂停一段时间,当用户移开手指时,计时器再次启动

我正在做类似的事情,但这不适用于我所问的情况:

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秒。

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

var isSlideTouched = false
在手势识别器中添加

isSlideTouched = true
以及autoScroll()中的一些代码


处理用户触摸的方法在哪里?您希望计时器暂停多长时间?只要它被触摸。您应该使用计数变量来处理计时器回调操作。设置/重置计数变量以实现不同的条件。
@objc func autoScroll() {
    if isSlideTouched {
        isSlideTouched = false
        return
    }