ScrollingFollowView 是一个简单的视图,它跟随 UIScrollView 的滚动。
ScrollingFollowView 仅支持使用 AutoLayout。 (我不会强制库用户使用此功能。我将修改此功能。请查看未来改进。)您必须像示例图像中那样使用 InterfaceBuilder 创建布局。
@IBOutlet weak var scrollingFollowView: ScrollingFollowView!
// NSLayoutConstraint of moving edge.
@IBOutlet weak var constraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
let scrollingFollowViewHeight = scrollingFollowView.frame.size.height
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.size.height
// First setup
// In default use, maxFollowPoint should be maxPoint of following to scroll DOWN.
// In default use, minFollowPoint should be maxPoint of following to scroll UP.
scrollingFollowView.setup(constraint: constraint, maxFollowPoint: scrollingFollowViewHeight + statusBarHeight, minFollowPoint: 0)
}
func scrollViewDidScroll(scrollView: UIScrollView) {
// scrollingFollowView follows UIScrollView scrolling.
scrollingFollowView.didScroll(scrollView)
}
您可以对 ScrollingFollowView 对象使用 show(animated:)
和 hide(animated:)
方法,如下所示:
// show
@IBAction func showButton() {
scrollingFollowView.show(true)
scrollingFollowView.resetPreviousPoint(scrollView)
}
// hide
@IBAction func hideButton() {
scrollingFollowView.hide(false)
scrollingFollowView.resetPreviousPoint(scrollView)
}
resetPreviousPoint(scrollView:)
必须在 show(animated:)
和 hide:animated)
之后调用,previousPoint
是 ScrollingFollowView 的私有属性,用于更改约束 constant 值。
并且显示和隐藏方法声明如下:
func show(animated: Bool, duration: Double = 0.2, completionHandler: (()->())? = nil)
func hide(animated: Bool, duration: Double = 0.2, completionHandler: (()->())? = nil)
因此,您可以为动画设置 动画持续时长
和 完成后处理
// show
@IBAction func showButton() {
scrollingFollowView.show(true, duration: 0.6) { print("showed") }
scrollingFollowView.resetPreviousPoint(scrollView)
}
// hide
@IBAction func hideButton() {
scrollingFollowView.hide(true, duration: 0.5) { print("hid") }
scrollingFollowView.resetPreviousPoint(scrollView)
}
您可以使用隐藏和显示延迟点,如下面的 gif 所示:
添加 setupDelayPoints(pointOfStartingHiding:pointOfStartingShowing:)
。例如,在 viewDidLoad()
中写入:
override func viewDidLoad() {
super.viewDidLoad()
let scrollingFollowViewHeight = scrollingFollowView.frame.size.height
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.size.height
scrollingFollowView.setup(constraint: constraint, maxFollowPoint: scrollingFollowViewHeight + statusBarHeight, minFollowPoint: 0)
scrollingFollowView.setupDelayPoints(pointOfStartingHiding: 100, pointOfStartingShowing: 50)
}
你可以像下面 gif 显示的那样控制半显示状态:
allowHalfDisplay
disallowHalfDisplay(自动动画)
您必须将参数 allowHalfDisplay
添加到 setup(constraint:maxFollowPoint:minFollowPoint:allowHalfDesplay:)
函数中。
override func viewDidLoad() {
super.viewDidLoad()
let scrollingFollowViewHeight = scrollingFollowView.frame.size.height
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.size.height
// allowHalfDisplay: Default is false.
// When allowHalfDisplay is true, ScrollingFollowView can display following scrolling state.
// When allowHalfDisplay is false, ScrollingFollowView can't display following scrolling state. (If ScrollingFollowView is half-display state, it automatically animates.)
scrollingFollowView.setup(constraint: constraint, maxFollowPoint: scrollingFollowViewHeight + statusBarHeight, minFollowPoint: 0, allowHalfDisplay: true)
}
并且您还必须在 scrollViewDidEndDecelerating(_ scrollView:)
和 scrollViewDidEndDragging(_ scrollView:willDecelerate:)
中调用 didEndScrolling()
和 didEndScrolling(_ decelerate:)
。
extension ViewController: UIScrollViewDelegate {
func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
navBarScrollingFollowView.didEndScrolling()
}
func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
navBarScrollingFollowView.didEndScrolling(decelerate)
}
}
如果您对这个库有任何意见或想法,请通过 Twitter 给我回复。
ScrollingFollowView 在 MIT 许可下发布。请阅读 LICENSE 文件以获取更多信息。