我正在尝试在滚动视图中自动滚动幻灯片。我实际上是在入职屏幕上这样做的。 但是,我希望计时器在用户触摸幻灯片时暂停一会儿,并在他移开手指时重新开始。
我正在做类似的事情,但这在我问的情况下不起作用:
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秒)后滑动到下一页。预期的。
答案 0 :(得分:0)
我认为您应该添加一些标记,例如
var isSlideTouched = false
在手势识别器中添加
isSlideTouched = true
以及autoScroll()中的一些代码
@objc func autoScroll() {
if isSlideTouched {
isSlideTouched = false
return
}