ios - 快速停止用户交互时滚动视图中的自动滚动
问题描述
我在我的应用程序中使用页面控制器。
它工作正常,每 3 秒自动滚动一次,并且当前位置也根据用户自定义滑动而改变。
但是当用户在我想停止自动滚动时手动滑动滚动视图时,我遇到了一个问题。
请使用我的以下代码查找。
var slides:[Slide] = [];
var offSet: CGFloat = 0
override func viewDidLoad() {
super.viewDidLoad()
slides = createSlides()
setupSlideScrollView(slides: slides)
pageControl.numberOfPages = slides.count
pageControl.currentPage = 0
view.bringSubview(toFront: pageControl)
let timer = Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(autoScroll), userInfo: nil, repeats: true)
}
@objc func autoScroll() {
let totalPossibleOffset = CGFloat(slides.count - 1) * self.view.bounds.size.width
if offSet == totalPossibleOffset {
offSet = 0 // come back to the first image after the last image
}
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)
}
}
解决方案
添加滚动视图委托并scrollViewDidEndDragging
在它调用时使用方法只是重置您的计时器,以便在 3 秒后重新启动它按原样工作。
推荐阅读
- tfs - 如何将自定义状态值添加到 Team Foundation Server 2018
- mysql - 使用 XAMPP/MariaDB (MySQL) 的 DECLARE 变量问题
- oracle - Oracle 18c 外部表从 UNC 路径导入 csv 文件
- vba - 运行时错误“1004”:您无法在此处跳过,因为复制区域和过去区域的大小不同
- php - TinyMce 不存储 html,只存储原始文本(laravel)
- elasticsearch - 无法使用弹性搜索接收器连接器(kafka-connect)
- c - 用于计算 C 中数字平方根的指针和函数
- php - 如何在codeigniter中存储会话终身?
- java - Java Web Start Swing App如何显示servlet信息?
- kubernetes - 使用 kubectl rollouts 更新我的图像,但还需要将我的部署对象保留在版本控制中