35 lines
1.1 KiB
Swift
35 lines
1.1 KiB
Swift
import UIKit
|
|
|
|
final class TableViewHeaderTransitioningHandler: NSObject, TransitioningHandler {
|
|
var animator: CollapsibleViewsAnimator?
|
|
|
|
private var startOffset: CGFloat = 0
|
|
private var navigationBarOffset: CGFloat = 0
|
|
private var isFirstScroll = true
|
|
|
|
private var container: CollapsibleViewsContainer?
|
|
|
|
init(collapsibleViewsContainer: CollapsibleViewsContainer) {
|
|
self.container = collapsibleViewsContainer
|
|
}
|
|
|
|
public func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
|
guard let largeHeaderView = container?.bottomHeaderView else {
|
|
return
|
|
}
|
|
|
|
if isFirstScroll {
|
|
startOffset = max(-(scrollView.contentOffset.y), 0)
|
|
navigationBarOffset = container?.fixedTopOffet ?? 0
|
|
isFirstScroll = false
|
|
}
|
|
|
|
let offsetY = scrollView.contentOffset.y + startOffset
|
|
|
|
let alpha = min(offsetY / (largeHeaderView.frame.height + navigationBarOffset), 1)
|
|
|
|
animator?.fractionComplete = alpha
|
|
animator?.currentContentOffset = scrollView.contentOffset
|
|
}
|
|
}
|