mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
70 lines
2.2 KiB
Swift
70 lines
2.2 KiB
Swift
import Foundation
|
|
import UIKit
|
|
import AsyncDisplayKit
|
|
|
|
class NavigationBarTransitionContainer: ASDisplayNode {
|
|
var progress: CGFloat = 0.0 {
|
|
didSet {
|
|
self.layout()
|
|
}
|
|
}
|
|
|
|
let transition: NavigationTransition
|
|
let topNavigationBar: NavigationBar
|
|
let bottomNavigationBar: NavigationBar
|
|
|
|
let topClippingNode: ASDisplayNode
|
|
let bottomClippingNode: ASDisplayNode
|
|
|
|
let topNavigationBarSupernode: ASDisplayNode?
|
|
let bottomNavigationBarSupernode: ASDisplayNode?
|
|
|
|
init(transition: NavigationTransition, topNavigationBar: NavigationBar, bottomNavigationBar: NavigationBar) {
|
|
self.transition = transition
|
|
|
|
self.topNavigationBar = topNavigationBar
|
|
self.topNavigationBarSupernode = topNavigationBar.supernode
|
|
|
|
self.bottomNavigationBar = bottomNavigationBar
|
|
self.bottomNavigationBarSupernode = bottomNavigationBar.supernode
|
|
|
|
self.topClippingNode = ASDisplayNode()
|
|
self.topClippingNode.clipsToBounds = true
|
|
self.bottomClippingNode = ASDisplayNode()
|
|
self.bottomClippingNode.clipsToBounds = true
|
|
|
|
super.init()
|
|
|
|
self.topClippingNode.addSubnode(self.topNavigationBar)
|
|
self.bottomClippingNode.addSubnode(self.bottomNavigationBar)
|
|
|
|
self.addSubnode(self.bottomClippingNode)
|
|
self.addSubnode(self.topClippingNode)
|
|
}
|
|
|
|
func complete() {
|
|
self.topNavigationBarSupernode?.addSubnode(self.topNavigationBar)
|
|
self.bottomNavigationBarSupernode?.addSubnode(self.bottomNavigationBar)
|
|
}
|
|
|
|
override func layout() {
|
|
super.layout()
|
|
|
|
let size = self.bounds.size
|
|
|
|
let position: CGFloat
|
|
switch self.transition {
|
|
case .Push:
|
|
position = 1.0 - progress
|
|
case .Pop:
|
|
position = progress
|
|
}
|
|
|
|
let offset = floorToScreenPixels(size.width * position)
|
|
|
|
self.topClippingNode.frame = CGRect(origin: CGPoint(x: offset, y: 0.0), size: size)
|
|
|
|
self.bottomClippingNode.frame = CGRect(origin: CGPoint(x: 0.0, y: 0.0), size: CGSize(width: offset, height: size.height))
|
|
}
|
|
}
|