Поскольку этот таймер работает, каждые 3 секунды он будет вызывать метод autoScroll()
, который выполняет прокрутку вашего ScrollView
независимо от вашей ручной прокрутки.
Сначала добавьте делегата в свой viewController
class YourViewController: UIVieController, UIScrollViewDelegate {
// EXISTING CODE
}
и определите глобальную переменную для таймера. Установите это в поле зрения, установите IBOutlet в вашей storyBoard.
var timer: Timer!
@IBOutlet weak var scrollView: UIScrollView!
В вашем viewDidLoad установите его
override func viewDidLoad() {
super.viewDidLoad()
slides = createSlides()
setupSlideScrollView(slides: slides)
pageControl.numberOfPages = slides.count
pageControl.currentPage = 0
view.bringSubview(toFront: pageControl)
// Set delegate here.
scrollView.delegate = self
timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
}
Итак, вам придется реализовать UIScrollViewDelegate
1) Реализуйте этот метод делегата и проверьте, если таймер isValid
, то invalidate()
it.
Подробности здесь и Здесь
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
if timer.isValid {
timer.invalidate()
}
}
2) Когда прокрутка закончится, вам придется снова запланировать таймер, чтобы он начал вызывать autoScroll
через каждые 3 секунды. Подробности здесь
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
offset = scrollView.contentOffset.x
timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
}
Надеюсь, это поможет.