2017-04-03 43 views
0

我正在寻找Xcode和Swift中的方式来检测我的用户是否已向下滚动应用程序。检测是用户已在iOS上滚动,然后更改视图的颜色

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

这是在Swift和Xcode中可以实现的东西吗?

在此先感谢! :)

UPDATE对不起,我忘了提及,我使用uiwebview,与我的视图覆盖它上面。在应用程序的顶部,它将是透明的,当我向下滚动webview时,它将变为黑色。我仍然可以用相同的方式检测卷轴吗?

+0

检查这个帖子http://stackoverflow.com/questions/40667985/how-to-hide-the-navigation-bar-and-toolbar-as-scroll-down-swift-like-mybridge/40670196 #40670196 – Joe

回答

0

您可以通过让控制器或其他类监听UISCrollViewDelegate协议来捕获滚动事件。

特别是,查找scrollViewDidScroll(滚动开始时)和scrollViewDidEndDecelerating(滚动结束时)。

后者需要一些时间,因此您还可以检查scrollViewDidScroll中的contentOffset以立即捕获此情况。

如果您不知道如何更改视图的backgroundColor,请提出另一个问题。

0

你必须实现用于检测滚动方向像波纹管滚动视图的方法:

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?

0

是有可能在迅速。您必须使用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 
     }) 
    } 
}