mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 22:55:00 +00:00
Voice Chat UI improvements
This commit is contained in:
@@ -26,20 +26,23 @@ public final class VoiceChatOverlayController: ViewController {
|
||||
}
|
||||
|
||||
private var isButtonHidden = false
|
||||
private var isSlidOffscreen = false
|
||||
func update(hidden: Bool, slide: Bool, animated: Bool) {
|
||||
guard let actionButton = self.controller?.actionButton, actionButton.supernode === self else {
|
||||
return
|
||||
}
|
||||
|
||||
if self.isButtonHidden == hidden {
|
||||
if self.isButtonHidden == hidden || (!slide && self.isSlidOffscreen) {
|
||||
return
|
||||
}
|
||||
self.isButtonHidden = hidden
|
||||
|
||||
if animated {
|
||||
let transition: ContainedViewLayoutTransition = .animated(duration: 0.4, curve: .spring)
|
||||
if hidden {
|
||||
if slide {
|
||||
|
||||
self.isSlidOffscreen = true
|
||||
transition.updateSublayerTransformOffset(layer: actionButton.layer, offset: CGPoint(x: 70.0, y: 0.0))
|
||||
} else {
|
||||
actionButton.layer.removeAllAnimations()
|
||||
actionButton.layer.animateScale(from: 1.0, to: 0.001, duration: 0.2, timingFunction: CAMediaTimingFunctionName.easeInEaseOut.rawValue, removeOnCompletion: false, completion: { [weak actionButton] _ in
|
||||
@@ -48,7 +51,8 @@ public final class VoiceChatOverlayController: ViewController {
|
||||
}
|
||||
} else {
|
||||
if slide {
|
||||
|
||||
self.isSlidOffscreen = false
|
||||
transition.updateSublayerTransformOffset(layer: actionButton.layer, offset: CGPoint())
|
||||
} else {
|
||||
actionButton.layer.removeAllAnimations()
|
||||
actionButton.isHidden = false
|
||||
@@ -135,7 +139,7 @@ public final class VoiceChatOverlayController: ViewController {
|
||||
}
|
||||
|
||||
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
|
||||
if let actionButton = self.controller?.actionButton, actionButton.supernode === self {
|
||||
if let actionButton = self.controller?.actionButton, actionButton.supernode === self && !self.isButtonHidden {
|
||||
let actionButtonSize = CGSize(width: 84.0, height: 84.0)
|
||||
let actionButtonFrame = CGRect(origin: CGPoint(x: actionButton.position.x - actionButtonSize.width / 2.0, y: actionButton.position.y - actionButtonSize.height / 2.0), size: actionButtonSize)
|
||||
if actionButtonFrame.contains(point) {
|
||||
@@ -169,17 +173,49 @@ public final class VoiceChatOverlayController: ViewController {
|
||||
return self.displayNode as! Node
|
||||
}
|
||||
|
||||
init(actionButton: VoiceChatActionButton) {
|
||||
private var disposable: Disposable?
|
||||
|
||||
init(actionButton: VoiceChatActionButton, navigationController: NavigationController?) {
|
||||
self.actionButton = actionButton
|
||||
|
||||
super.init(navigationBarPresentationData: nil)
|
||||
|
||||
self.statusBar.statusBarStyle = .Ignore
|
||||
self.additionalSideInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: 75.0)
|
||||
|
||||
if let navigationController = navigationController {
|
||||
let controllers: Signal<[UIViewController], NoError> = .single([])
|
||||
|> then(navigationController.viewControllersSignal)
|
||||
let overlayControllers: Signal<[UIViewController], NoError> = .single([])
|
||||
|> then(navigationController.overlayControllersSignal)
|
||||
|
||||
self.disposable = (combineLatest(queue: Queue.mainQueue(), controllers, overlayControllers)).start(next: { [weak self] controllers, overlayControllers in
|
||||
if let strongSelf = self {
|
||||
var hasVoiceChatController = false
|
||||
for controller in controllers {
|
||||
if controller is VoiceChatController {
|
||||
hasVoiceChatController = true
|
||||
}
|
||||
}
|
||||
|
||||
var hidden = true
|
||||
if controllers.count == 1 || controllers.last is ChatController {
|
||||
hidden = false
|
||||
}
|
||||
if overlayControllers.count > 0 {
|
||||
hidden = true
|
||||
}
|
||||
if hasVoiceChatController {
|
||||
hidden = false
|
||||
}
|
||||
strongSelf.controllerNode.update(hidden: hidden, slide: true, animated: true)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
deinit {
|
||||
print("")
|
||||
self.disposable?.dispose()
|
||||
}
|
||||
|
||||
required init(coder aDecoder: NSCoder) {
|
||||
|
||||
Reference in New Issue
Block a user