Add dismissByTapOutsideSource

This commit is contained in:
Peter
2019-07-23 15:50:58 +01:00
parent 9142d3c231
commit 51bf263135
2 changed files with 14 additions and 5 deletions

View File

@@ -22,7 +22,7 @@ public enum TooltipControllerContent: Equatable {
}
}
private enum SourceAndRect {
public enum SourceAndRect {
case node(() -> (ASDisplayNode, CGRect)?)
case view(() -> (UIView, CGRect)?)
@@ -42,7 +42,7 @@ private enum SourceAndRect {
}
public final class TooltipControllerPresentationArguments {
fileprivate let sourceAndRect: SourceAndRect
public let sourceAndRect: SourceAndRect
public init(sourceNodeAndRect: @escaping () -> (ASDisplayNode, CGRect)?) {
self.sourceAndRect = .node(sourceNodeAndRect)
@@ -76,6 +76,7 @@ open class TooltipController: ViewController {
private let timeout: Double
private let dismissByTapOutside: Bool
private let dismissByTapOutsideSource: Bool
private let dismissImmediatelyOnLayoutUpdate: Bool
private var timeoutTimer: SwiftSignalKit.Timer?
@@ -83,10 +84,11 @@ open class TooltipController: ViewController {
public var dismissed: (() -> Void)?
public init(content: TooltipControllerContent, timeout: Double = 2.0, dismissByTapOutside: Bool = false, dismissImmediatelyOnLayoutUpdate: Bool = false) {
public init(content: TooltipControllerContent, timeout: Double = 2.0, dismissByTapOutside: Bool = false, dismissByTapOutsideSource: Bool = false, dismissImmediatelyOnLayoutUpdate: Bool = false) {
self.content = content
self.timeout = timeout
self.dismissByTapOutside = dismissByTapOutside
self.dismissByTapOutsideSource = dismissByTapOutsideSource
self.dismissImmediatelyOnLayoutUpdate = dismissImmediatelyOnLayoutUpdate
super.init(navigationBarPresentationData: nil)
@@ -103,7 +105,7 @@ open class TooltipController: ViewController {
override open func loadDisplayNode() {
self.displayNode = TooltipControllerNode(content: self.content, dismiss: { [weak self] in
self?.dismiss()
}, dismissByTapOutside: self.dismissByTapOutside)
}, dismissByTapOutside: self.dismissByTapOutside, dismissByTapOutsideSource: self.dismissByTapOutsideSource)
self.displayNodeDidLoad()
}

View File

@@ -17,9 +17,11 @@ final class TooltipControllerNode: ASDisplayNode {
var arrowOnBottom: Bool = true
private var dismissedByTouchOutside = false
private var dismissByTapOutsideSource = false
init(content: TooltipControllerContent, dismiss: @escaping () -> Void, dismissByTapOutside: Bool) {
init(content: TooltipControllerContent, dismiss: @escaping () -> Void, dismissByTapOutside: Bool, dismissByTapOutsideSource: Bool) {
self.dismissByTapOutside = dismissByTapOutside
self.dismissByTapOutsideSource = dismissByTapOutsideSource
self.containerNode = ContextMenuContainerNode()
self.containerNode.backgroundColor = UIColor(white: 0.0, alpha: 0.8)
@@ -128,6 +130,11 @@ final class TooltipControllerNode: ASDisplayNode {
self.dismissedByTouchOutside = true
self.dismiss()
}
} else if self.dismissByTapOutsideSource, let sourceRect = self.sourceRect, !sourceRect.contains(point) {
if !self.dismissedByTouchOutside {
self.dismissedByTouchOutside = true
self.dismiss()
}
}
return nil
}