我目前有一个UITableView,其HeaderView是一个UIScrollView。我使用它作为一种旋转木马,每两秒显示一次不断旋转的信息触发定时器。我想要做的是检测用户何时自己移动了滚动视图。这是我现在必须处理ScrollView运动的代码。
override func viewDidLoad() {
var myTimer = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(runTimedCode), userInfo: nil, repeats: true)
}
func runTimedCode() {
var itemCount = newsArray.count // how many items are in the news reel
if currentPage < itemCount {
let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position
featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true)
currentPage += 1
} else {
// end of items
currentPage = 0
let newX = CGFloat(currentPage) * self.view.frame.width // calculate next page position
print("new x = \(newX)")
featuredScrollView.setContentOffset(CGPoint(x: newX, y: 0), animated: true)
}
}
但是只有在移动tableview时才会调用scrollViewDidScroll函数。有没有办法检测何时滚动tableView上方的ScrollView?我完全坚持这一点任何帮助表示赞赏。谢谢!
答案 0 :(得分:1)
首先,确保设置了委托,以便视图控制器从滚动视图和表视图中获取事件。
接下来,保留引用以确保您可以区分这两个视图。
最后,检查哪个引用正在触发viewdidscroll函数并在那里执行代码。
let view1:UIScrollView!
let view2:UITableView!
view1.delegate = self
view2.delegate = self
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView == view1 {
// Do something
}
if scrollView == view2 {
// Do something
}
}