我正在寻找Xcode和Swift的方法来检测我的用户是否已向下滚动应用程序。
如果他们有,我想将应用程序顶部的视图从透明变为黑色。如果用户再次向上滚动到顶部,则视图会从黑色变回透明。
这是Swift和Xcode可以实现的吗?
提前致谢! :)
更新抱歉,我忘了提及,我正在使用uiwebview,我的视图覆盖在它上面。在应用程序的顶部,它将是透明的,当我向下滚动webview时,它将变为黑色。我还能以同样的方式检测到滚动吗?
答案 0 :(得分:1)
是的,有可能在swift中。您必须使用UIScrollViewDelegate方法来控制滚动。
func scrollViewWillBeginDecelerating(_ scrollView: UIScrollView) {
print("scrollViewWillBeginDecelerating")
let actualPosition = scrollView.panGestureRecognizer.translation(in: scrollView.superview)
if (actualPosition.y > 0){
// Dragging down
UIView.animate(withDuration: 3, animations: {
//Change the color of view
})
}else{
// Dragging up
UIView.animate(withDuration: 3, animations: {
//Change the color of view
})
}
}
答案 1 :(得分:0)
您可以通过让控制器或其他类听取UISCrollViewDelegate
协议来捕获滚动事件。
特别是,查找scrollViewDidScroll
(滚动开始时)和scrollViewDidEndDecelerating
(滚动结束时)。
后者需要一些时间,因此您还可以检查contentOffset
中的scrollViewDidScroll
以立即捕捉此情况。
如果您不知道如何更改视图的backgroundColor
,请提出其他问题。
答案 2 :(得分:0)
您必须实现scrollView方法来检测滚动方向,如下所示:
private var lastContentOffset: CGFloat = 0
func scrollViewDidScroll(scrollView: UIScrollView!) {
if (self.lastContentOffset > scrollView.contentOffset.y) {
// move up
}
else if (self.lastContentOffset < scrollView.contentOffset.y) {
// move down
}
// update the new position
self.lastContentOffset = scrollView.contentOffset.y
}