Accessibility updates

This commit is contained in:
Peter 2019-03-19 20:51:31 +04:00
parent 4033e28c74
commit 5203c8a156
5 changed files with 41 additions and 8 deletions

View File

@ -1,6 +1,6 @@
import Foundation import Foundation
open class ActionSheetController: ViewController { open class ActionSheetController: ViewController, PresentableController {
private var actionSheetNode: ActionSheetControllerNode { private var actionSheetNode: ActionSheetControllerNode {
return self.displayNode as! ActionSheetControllerNode return self.displayNode as! ActionSheetControllerNode
} }
@ -23,6 +23,8 @@ open class ActionSheetController: ViewController {
self.theme = theme self.theme = theme
super.init(navigationBarPresentationData: nil) super.init(navigationBarPresentationData: nil)
self.blocksBackgroundWhenInOverlay = true
} }
required public init(coder aDecoder: NSCoder) { required public init(coder aDecoder: NSCoder) {
@ -54,10 +56,14 @@ open class ActionSheetController: ViewController {
self.actionSheetNode.containerLayoutUpdated(layout, transition: transition) self.actionSheetNode.containerLayoutUpdated(layout, transition: transition)
} }
open override func viewWillAppear(_ animated: Bool) { open override func viewDidAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewDidAppear(animated)
self.actionSheetNode.animateIn() self.viewDidAppear(completion: {})
}
public func viewDidAppear(completion: @escaping () -> Void) {
self.actionSheetNode.animateIn(completion: completion)
} }
public func setItemGroups(_ groups: [ActionSheetItemGroup]) { public func setItemGroups(_ groups: [ActionSheetItemGroup]) {

View File

@ -110,7 +110,7 @@ final class ActionSheetControllerNode: ASDisplayNode, UIScrollViewDelegate {
self.updateScrollDimViews(size: layout.size, insets: insets) self.updateScrollDimViews(size: layout.size, insets: insets)
} }
func animateIn() { func animateIn(completion: @escaping () -> Void) {
let tempDimView = UIView() let tempDimView = UIView()
tempDimView.backgroundColor = self.theme.dimColor tempDimView.backgroundColor = self.theme.dimColor
tempDimView.frame = self.bounds.offsetBy(dx: 0.0, dy: -self.bounds.size.height) tempDimView.frame = self.bounds.offsetBy(dx: 0.0, dy: -self.bounds.size.height)
@ -124,6 +124,7 @@ final class ActionSheetControllerNode: ASDisplayNode, UIScrollViewDelegate {
self.layer.animateBounds(from: self.bounds.offsetBy(dx: 0.0, dy: -self.bounds.size.height), to: self.bounds, duration: 0.5, timingFunction: kCAMediaTimingFunctionSpring, completion: { [weak tempDimView] _ in self.layer.animateBounds(from: self.bounds.offsetBy(dx: 0.0, dy: -self.bounds.size.height), to: self.bounds, duration: 0.5, timingFunction: kCAMediaTimingFunctionSpring, completion: { [weak tempDimView] _ in
tempDimView?.removeFromSuperview() tempDimView?.removeFromSuperview()
completion()
}) })
} }

View File

@ -2,6 +2,10 @@ import UIKit
import AsyncDisplayKit import AsyncDisplayKit
import SwiftSignalKit import SwiftSignalKit
public protocol PresentableController: class {
func viewDidAppear(completion: @escaping () -> Void)
}
public protocol ContainableController: class { public protocol ContainableController: class {
var view: UIView! { get } var view: UIView! { get }
var displayNode: ASDisplayNode { get } var displayNode: ASDisplayNode { get }

View File

@ -189,7 +189,14 @@ final class PresentationContext {
(controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(false) (controller as? UIViewController)?.setIgnoreAppearanceMethodInvocations(false)
view.layer.invalidateUpTheTree() view.layer.invalidateUpTheTree()
controller.viewWillAppear(false) controller.viewWillAppear(false)
controller.viewDidAppear(false) if let controller = controller as? PresentableController {
controller.viewDidAppear(completion: { [weak self] in
self?.notifyAccessibilityScreenChanged()
})
} else {
controller.viewDidAppear(false)
strongSelf.notifyAccessibilityScreenChanged()
}
} }
strongSelf.updateViews() strongSelf.updateViews()
} }
@ -246,7 +253,14 @@ final class PresentationContext {
} }
controller.view.frame = CGRect(origin: CGPoint(), size: layout.size) controller.view.frame = CGRect(origin: CGPoint(), size: layout.size)
controller.containerLayoutUpdated(layout, transition: .immediate) controller.containerLayoutUpdated(layout, transition: .immediate)
controller.viewDidAppear(false) if let controller = controller as? PresentableController {
controller.viewDidAppear(completion: { [weak self] in
self?.notifyAccessibilityScreenChanged()
})
} else {
controller.viewDidAppear(false)
self.notifyAccessibilityScreenChanged()
}
} }
self.updateViews() self.updateViews()
} }
@ -261,7 +275,7 @@ final class PresentationContext {
} }
private func updateViews() { private func updateViews() {
self.hasOpaqueOverlay = self.isCurrentlyOpaque self.hasOpaqueOverlay = self.currentlyBlocksBackgroundWhenInOverlay
var topHasOpaque = false var topHasOpaque = false
for (controller, _) in self.controllers.reversed() { for (controller, _) in self.controllers.reversed() {
if topHasOpaque { if topHasOpaque {
@ -275,6 +289,10 @@ final class PresentationContext {
} }
} }
private func notifyAccessibilityScreenChanged() {
UIAccessibilityPostNotification(UIAccessibilityScreenChangedNotification, nil)
}
func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
for (controller, _) in self.controllers.reversed() { for (controller, _) in self.controllers.reversed() {
if controller.isViewLoaded { if controller.isViewLoaded {

View File

@ -321,6 +321,10 @@ open class ViewControllerPresentationArguments {
layer.setTraceableInfo(CATracingLayerInfo(shouldBeAdjustedToInverseTransform: false, userData: self.displayNode.layer, tracingTag: WindowTracingTags.keyboard, disableChildrenTracingTags: 0)) layer.setTraceableInfo(CATracingLayerInfo(shouldBeAdjustedToInverseTransform: false, userData: self.displayNode.layer, tracingTag: WindowTracingTags.keyboard, disableChildrenTracingTags: 0))
} }
self.updateScrollToTopView() self.updateScrollToTopView()
if let backgroundColor = self.displayNode.backgroundColor, backgroundColor.alpha.isEqual(to: 1.0) {
self.blocksBackgroundWhenInOverlay = true
self.isOpaqueWhenInOverlay = true
}
} }
public func requestLayout(transition: ContainedViewLayoutTransition) { public func requestLayout(transition: ContainedViewLayoutTransition) {