mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-01 12:17:53 +00:00
76 lines
2.7 KiB
Swift
76 lines
2.7 KiB
Swift
import Foundation
|
|
import Display
|
|
import AsyncDisplayKit
|
|
import TelegramCore
|
|
|
|
final class MediaNavigationAccessoryPanel: ASDisplayNode {
|
|
let containerNode: MediaNavigationAccessoryContainerNode
|
|
|
|
var close: (() -> Void)?
|
|
var togglePlayPause: (() -> Void)?
|
|
var previous: (() -> Void)?
|
|
var next: (() -> Void)?
|
|
var seek: ((Double) -> Void)?
|
|
|
|
init(account: Account) {
|
|
self.containerNode = MediaNavigationAccessoryContainerNode(account: account)
|
|
|
|
super.init()
|
|
|
|
self.addSubnode(self.containerNode)
|
|
|
|
containerNode.headerNode.close = { [weak self] in
|
|
if let strongSelf = self, let close = strongSelf.close {
|
|
close()
|
|
}
|
|
}
|
|
containerNode.headerNode.togglePlayPause = { [weak self] in
|
|
if let strongSelf = self, let togglePlayPause = strongSelf.togglePlayPause {
|
|
togglePlayPause()
|
|
}
|
|
}
|
|
containerNode.headerNode.previous = { [weak self] in
|
|
if let strongSelf = self, let previous = strongSelf.previous {
|
|
previous()
|
|
}
|
|
}
|
|
containerNode.headerNode.next = { [weak self] in
|
|
if let strongSelf = self, let next = strongSelf.next {
|
|
next()
|
|
}
|
|
}
|
|
|
|
containerNode.headerNode.seek = { [weak self] timestamp in
|
|
if let strongSelf = self, let seek = strongSelf.seek {
|
|
seek(timestamp)
|
|
}
|
|
}
|
|
}
|
|
|
|
func updateLayout(size: CGSize, transition: ContainedViewLayoutTransition) {
|
|
transition.updateFrame(node: self.containerNode, frame: CGRect(origin: CGPoint(), size: size))
|
|
self.containerNode.updateLayout(size: size, transition: transition)
|
|
}
|
|
|
|
func animateIn(transition: ContainedViewLayoutTransition) {
|
|
self.clipsToBounds = true
|
|
let contentPosition = self.containerNode.layer.position
|
|
transition.animatePosition(node: self.containerNode, from: CGPoint(x: contentPosition.x, y: contentPosition.y - 37.0), completion: { [weak self] _ in
|
|
self?.clipsToBounds = false
|
|
})
|
|
}
|
|
|
|
func animateOut(transition: ContainedViewLayoutTransition, completion: @escaping () -> Void) {
|
|
self.clipsToBounds = true
|
|
let contentPosition = self.containerNode.layer.position
|
|
transition.animatePosition(node: self.containerNode, to: CGPoint(x: contentPosition.x, y: contentPosition.y - 37.0), removeOnCompletion: false, completion: { [weak self] _ in
|
|
self?.clipsToBounds = false
|
|
completion()
|
|
})
|
|
}
|
|
|
|
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
|
return self.containerNode.hitTest(point, with: event)
|
|
}
|
|
}
|