检测用户是否在iOS上滚动,然后更改了视图的颜色

时间:2017-04-03 10:51:57

标签: ios swift xcode uiscrollview uiwebview

我正在寻找Xcode和Swift的方法来检测我的用户是否已向下滚动应用程序。

如果他们有,我想将应用程序顶部的视图从透明变为黑色。如果用户再次向上滚动到顶部,则视图会从黑色变回透明。

这是Swift和Xcode可以实现的吗?

提前致谢! :)

更新抱歉,我忘了提及,我正在使用uiwebview,我的视图覆盖在它上面。在应用程序的顶部,它将是透明的,当我向下滚动webview时,它将变为黑色。我还能以同样的方式检测到滚动吗?

3 个答案:

答案 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
    } 

参考:How to get UIScrollView vertical direction in Swift?