Various improvements

This commit is contained in:
Ilya Laktyushin
2022-05-20 23:11:45 +04:00
parent 10326f1fac
commit 4b41660767
53 changed files with 1357 additions and 522 deletions

View File

@@ -361,6 +361,11 @@ open class NavigationController: UINavigationController, ContainableController,
private func updateContainers(layout rawLayout: ContainerViewLayout, transition: ContainedViewLayoutTransition) {
self.isUpdatingContainers = true
if let badgeNode = self.badgeNode, let image = badgeNode.image {
badgeNode.isHidden = !rawLayout.deviceMetrics.hasTopNotch || rawLayout.size.width > rawLayout.size.height
badgeNode.frame = CGRect(origin: CGPoint(x: floorToScreenPixels((rawLayout.size.width - image.size.width) / 2.0), y: 6.0), size: image.size)
}
var layout = rawLayout
if self.ignoreInputHeight {
@@ -631,6 +636,7 @@ open class NavigationController: UINavigationController, ContainableController,
var topVisibleModalContainerWithStatusBar: NavigationModalContainer?
var visibleModalCount = 0
var topModalIsFlat = false
var topFlatModalHasProgress = false
let isLandscape = layout.orientation == .landscape
var hasVisibleStandaloneModal = false
var topModalDismissProgress: CGFloat = 0.0
@@ -659,6 +665,17 @@ open class NavigationController: UINavigationController, ContainableController,
effectiveModalTransition = 1.0
}
if navigationLayout.modal[i].isFlat, let lastController = navigationLayout.modal[i].controllers.last {
lastController.modalStyleOverlayTransitionFactorUpdated = { [weak self] transition in
guard let strongSelf = self else {
return
}
strongSelf.updateContainersNonReentrant(transition: transition)
}
modalStyleOverlayTransitionFactor = max(modalStyleOverlayTransitionFactor, lastController.modalStyleOverlayTransitionFactor)
topFlatModalHasProgress = modalStyleOverlayTransitionFactor > 0.0
}
containerTransition.updateFrame(node: modalContainer, frame: CGRect(origin: CGPoint(), size: layout.size))
modalContainer.update(layout: modalContainer.isFlat ? overlayLayout : layout, controllers: navigationLayout.modal[i].controllers, coveredByModalTransition: effectiveModalTransition, transition: containerTransition)
@@ -862,9 +879,15 @@ open class NavigationController: UINavigationController, ContainableController,
let visibleRootModalDismissProgress: CGFloat
var additionalModalFrameProgress: CGFloat
if visibleModalCount == 1 {
effectiveRootModalDismissProgress = (topModalIsFlat || isLandscape) ? 1.0 : topModalDismissProgress
visibleRootModalDismissProgress = effectiveRootModalDismissProgress
additionalModalFrameProgress = 0.0
if topFlatModalHasProgress {
effectiveRootModalDismissProgress = 0.0
visibleRootModalDismissProgress = effectiveRootModalDismissProgress
additionalModalFrameProgress = 1.0 - topModalDismissProgress
} else {
effectiveRootModalDismissProgress = ((topModalIsFlat && !topFlatModalHasProgress) || isLandscape) ? 1.0 : topModalDismissProgress
visibleRootModalDismissProgress = effectiveRootModalDismissProgress
additionalModalFrameProgress = 0.0
}
} else if visibleModalCount >= 2 {
effectiveRootModalDismissProgress = 0.0
visibleRootModalDismissProgress = topModalDismissProgress
@@ -929,7 +952,7 @@ open class NavigationController: UINavigationController, ContainableController,
}
let maxScale: CGFloat
let maxOffset: CGFloat
if topModalIsFlat || isLandscape {
if (topModalIsFlat && !topFlatModalHasProgress) || isLandscape {
maxScale = 1.0
maxOffset = 0.0
} else if visibleModalCount <= 1 {
@@ -1219,8 +1242,16 @@ open class NavigationController: UINavigationController, ContainableController,
self.displayNode.addSubnode(inCallStatusBar)
}
}
let badgeNode = ASImageNode()
badgeNode.displaysAsynchronously = false
badgeNode.image = UIImage(bundleImageName: "Components/BadgeTest")
self.badgeNode = badgeNode
self.displayNode.addSubnode(badgeNode)
}
private var badgeNode: ASImageNode?
public func pushViewController(_ controller: ViewController) {
self.pushViewController(controller, completion: {})
}