Swiftgram/submodules/TelegramUI/TelegramUI/MediaNavigationAccessoryPanel.swift
Peter b317aab568 Add 'submodules/TelegramUI/' from commit 'fa3ac0b61a27c8dd3296518a15891a6f9750cbf2'
git-subtree-dir: submodules/TelegramUI
git-subtree-mainline: 5c1613d1048026b9e00a6ce753775cef87eb53fa
git-subtree-split: fa3ac0b61a27c8dd3296518a15891a6f9750cbf2
2019-06-11 19:00:46 +01:00

80 lines
3.0 KiB
Swift

import Foundation
import UIKit
import Display
import AsyncDisplayKit
import TelegramCore
final class MediaNavigationAccessoryPanel: ASDisplayNode {
let containerNode: MediaNavigationAccessoryContainerNode
var close: (() -> Void)?
var toggleRate: (() -> Void)?
var togglePlayPause: (() -> Void)?
var tapAction: (() -> Void)?
var playPrevious: (() -> Void)?
var playNext: (() -> Void)?
init(context: AccountContext) {
self.containerNode = MediaNavigationAccessoryContainerNode(context: context)
super.init()
self.addSubnode(self.containerNode)
self.containerNode.headerNode.close = { [weak self] in
if let strongSelf = self, let close = strongSelf.close {
close()
}
}
self.containerNode.headerNode.toggleRate = { [weak self] in
self?.toggleRate?()
}
self.containerNode.headerNode.togglePlayPause = { [weak self] in
if let strongSelf = self, let togglePlayPause = strongSelf.togglePlayPause {
togglePlayPause()
}
}
self.containerNode.headerNode.tapAction = { [weak self] in
if let strongSelf = self, let tapAction = strongSelf.tapAction {
tapAction()
}
}
self.containerNode.headerNode.playPrevious = { [weak self] in
if let strongSelf = self, let playPrevious = strongSelf.playPrevious {
playPrevious()
}
}
self.containerNode.headerNode.playNext = { [weak self] in
if let strongSelf = self, let playNext = strongSelf.playNext {
playNext()
}
}
}
func updateLayout(size: CGSize, leftInset: CGFloat, rightInset: CGFloat, transition: ContainedViewLayoutTransition) {
transition.updateFrame(node: self.containerNode, frame: CGRect(origin: CGPoint(), size: size))
self.containerNode.updateLayout(size: size, leftInset: leftInset, rightInset: rightInset, 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)
}
}