mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-10-09 03:20:48 +00:00
Enable status bar animations
This commit is contained in:
parent
842ef1331b
commit
15f775ba50
@ -269,6 +269,18 @@ final class NavigationContainer: ASDisplayNode, UIGestureRecognizerDelegate {
|
||||
}
|
||||
|
||||
if controllers.last !== self.state.top?.value {
|
||||
self.state.top?.value.statusBar.alphaUpdated = nil
|
||||
if let controller = controllers.last {
|
||||
controller.statusBar.alphaUpdated = { [weak self, weak controller] transition in
|
||||
guard let strongSelf = self, let controller = controller else {
|
||||
return
|
||||
}
|
||||
if strongSelf.state.top?.value === controller && strongSelf.state.transition == nil {
|
||||
strongSelf.statusBarStyleUpdated?(transition)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if controllers.last !== self.state.pending?.value.value {
|
||||
self.state.pending = nil
|
||||
if let last = controllers.last {
|
||||
|
@ -302,7 +302,20 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
|
||||
private weak var currentTopVisibleOverlayContainerStatusBar: NavigationOverlayContainer? = nil
|
||||
|
||||
private var isUpdatingContainers: Bool = false
|
||||
|
||||
private func updateContainersNonReentrant(transition: ContainedViewLayoutTransition) {
|
||||
if self.isUpdatingContainers {
|
||||
return
|
||||
}
|
||||
if let layout = self.validLayout {
|
||||
self.updateContainers(layout: layout, transition: transition)
|
||||
}
|
||||
}
|
||||
|
||||
private func updateContainers(layout rawLayout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
|
||||
self.isUpdatingContainers = true
|
||||
|
||||
var layout = rawLayout
|
||||
|
||||
if self.ignoreInputHeight {
|
||||
@ -393,18 +406,14 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
guard let strongSelf = self, let modalContainer = modalContainer else {
|
||||
return
|
||||
}
|
||||
if let layout = strongSelf.validLayout {
|
||||
strongSelf.updateContainers(layout: layout, transition: .animated(duration: 0.5, curve: .spring))
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: .animated(duration: 0.5, curve: .spring))
|
||||
}
|
||||
}
|
||||
modalContainer.updateDismissProgress = { [weak self, weak modalContainer] _, transition in
|
||||
guard let strongSelf = self, let modalContainer = modalContainer else {
|
||||
return
|
||||
}
|
||||
if let layout = strongSelf.validLayout {
|
||||
strongSelf.updateContainers(layout: layout, transition: transition)
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
}
|
||||
modalContainer.interactivelyDismissed = { [weak self, weak modalContainer] hadInputFocus in
|
||||
guard let strongSelf = self, let modalContainer = modalContainer else {
|
||||
@ -632,10 +641,10 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self?.controllerRemoved(controller)
|
||||
})
|
||||
flatContainer.statusBarStyleUpdated = { [weak self] transition in
|
||||
guard let strongSelf = self, let layout = strongSelf.validLayout else {
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
strongSelf.updateContainers(layout: layout, transition: transition)
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
}
|
||||
if previousModalContainer == nil {
|
||||
flatContainer.keyboardViewManager = self.keyboardViewManager
|
||||
@ -655,10 +664,10 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self?.controllerRemoved(controller)
|
||||
})
|
||||
flatContainer.statusBarStyleUpdated = { [weak self] transition in
|
||||
guard let strongSelf = self, let layout = strongSelf.validLayout else {
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
strongSelf.updateContainers(layout: layout, transition: transition)
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
}
|
||||
if previousModalContainer == nil {
|
||||
flatContainer.keyboardViewManager = self.keyboardViewManager
|
||||
@ -885,6 +894,8 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
self.validStatusBarHidden = statusBarHidden
|
||||
self.statusBarHost?.setStatusBarHidden(statusBarHidden, animated: animateStatusBarStyleTransition)
|
||||
}
|
||||
|
||||
self.isUpdatingContainers = false
|
||||
}
|
||||
|
||||
private func controllerRemoved(_ controller: ViewController) {
|
||||
@ -1111,16 +1122,12 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
}
|
||||
}
|
||||
}
|
||||
if let layout = strongSelf.validLayout {
|
||||
strongSelf.updateContainers(layout: layout, transition: .immediate)
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: .immediate)
|
||||
}, statusBarUpdated: { [weak self] transition in
|
||||
guard let strongSelf = self else {
|
||||
return
|
||||
}
|
||||
if let layout = strongSelf.validLayout {
|
||||
strongSelf.updateContainers(layout: layout, transition: transition)
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: transition)
|
||||
})
|
||||
if inGlobal {
|
||||
self.globalOverlayContainers.append(container)
|
||||
@ -1131,9 +1138,7 @@ open class NavigationController: UINavigationController, ContainableController,
|
||||
guard let strongSelf = self, let container = container else {
|
||||
return
|
||||
}
|
||||
if let layout = strongSelf.validLayout {
|
||||
strongSelf.updateContainers(layout: layout, transition: .immediate)
|
||||
}
|
||||
strongSelf.updateContainersNonReentrant(transition: .immediate)
|
||||
}
|
||||
if let layout = self.validLayout {
|
||||
self.updateContainers(layout: layout, transition: .immediate)
|
||||
|
@ -64,15 +64,26 @@ private final class StatusBarView: UITracingLayerView {
|
||||
}
|
||||
|
||||
public final class StatusBar: ASDisplayNode {
|
||||
public var statusBarStyle: StatusBarStyle = .Black {
|
||||
didSet {
|
||||
if self.statusBarStyle != oldValue {
|
||||
self.layer.invalidateUpTheTree()
|
||||
private var _statusBarStyle: StatusBarStyle = .Black
|
||||
|
||||
public var statusBarStyle: StatusBarStyle {
|
||||
get {
|
||||
return self._statusBarStyle
|
||||
} set(value) {
|
||||
if self._statusBarStyle != value {
|
||||
self._statusBarStyle = value
|
||||
self.alphaUpdated?(.immediate)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public func updateStatusBarStyle(_ statusBarStyle: StatusBarStyle, animated: Bool) {
|
||||
if self._statusBarStyle != statusBarStyle {
|
||||
self._statusBarStyle = statusBarStyle
|
||||
self.alphaUpdated?(animated ? .animated(duration: 0.3, curve: .easeInOut) : .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
public var ignoreInCall: Bool = false
|
||||
|
||||
var inCallNavigate: (() -> Void)?
|
||||
|
@ -125,6 +125,8 @@ public enum ViewControllerNavigationPresentation {
|
||||
open var navigationPresentation: ViewControllerNavigationPresentation = .default
|
||||
var _presentedInModal: Bool = false
|
||||
|
||||
public var presentedOverCoveringView: Bool = false
|
||||
|
||||
public var presentationArguments: Any?
|
||||
|
||||
public var tabBarItemDebugTapAction: (() -> Void)?
|
||||
|
@ -400,7 +400,7 @@ open class ItemListController: ViewController, KeyShortcutResponder, Presentable
|
||||
strongSelf.theme = controllerState.theme
|
||||
|
||||
strongSelf.navigationBar?.updatePresentationData(NavigationBarPresentationData(theme: NavigationBarTheme(rootControllerTheme: strongSelf.theme), strings: NavigationBarStrings(presentationStrings: strongSelf.strings)))
|
||||
strongSelf.statusBar.statusBarStyle = strongSelf.theme.rootController.statusBarStyle.style
|
||||
strongSelf.statusBar.updateStatusBarStyle(strongSelf.theme.rootController.statusBarStyle.style, animated: true)
|
||||
|
||||
strongSelf.segmentedTitleView?.theme = controllerState.theme
|
||||
|
||||
|
@ -685,7 +685,7 @@ public final class ThemeSettingsCrossfadeController: ViewController {
|
||||
|
||||
super.init(navigationBarPresentationData: nil)
|
||||
|
||||
self.statusBar.statusBarStyle = .Hide
|
||||
self.statusBar.statusBarStyle = .Ignore
|
||||
}
|
||||
|
||||
required public init(coder aDecoder: NSCoder) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user