Fix scrubber hit testing

This commit is contained in:
Ilya Laktyushin 2019-10-07 08:12:06 +03:00
parent e4db142bc3
commit 25a858a06b
2 changed files with 7 additions and 9 deletions

View File

@ -476,7 +476,6 @@ public final class TextNodeLayout: NSObject {
} }
} }
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size) var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
lineFrame = displayLineFrame(frame: lineFrame, isRTL: line.isRTL, boundingRect: CGRect(origin: CGPoint(), size: self.size), cutout: self.cutout) lineFrame = displayLineFrame(frame: lineFrame, isRTL: line.isRTL, boundingRect: CGRect(origin: CGPoint(), size: self.size), cutout: self.cutout)
let width = abs(rightOffset - leftOffset) let width = abs(rightOffset - leftOffset)
@ -528,7 +527,7 @@ public final class TextNodeLayout: NSObject {
var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size) var lineFrame = CGRect(origin: CGPoint(x: line.frame.origin.x, y: line.frame.origin.y - line.frame.size.height + self.firstLineOffset), size: line.frame.size)
lineFrame = displayLineFrame(frame: lineFrame, isRTL: line.isRTL, boundingRect: CGRect(origin: CGPoint(), size: self.size), cutout: self.cutout) lineFrame = displayLineFrame(frame: lineFrame, isRTL: line.isRTL, boundingRect: CGRect(origin: CGPoint(), size: self.size), cutout: self.cutout)
let rect = CGRect(origin: CGPoint(x: lineFrame.minX + leftOffset + self.insets.left, y: lineFrame.minY + self.insets.top), size: CGSize(width: rightOffset - leftOffset, height: lineFrame.size.height)) let rect = CGRect(origin: CGPoint(x: lineFrame.minX + min(leftOffset, rightOffset) + self.insets.left, y: lineFrame.minY + self.insets.top), size: CGSize(width: abs(rightOffset - leftOffset), height: lineFrame.size.height))
if coveringRect.isEmpty { if coveringRect.isEmpty {
coveringRect = rect coveringRect = rect
} else { } else {

View File

@ -46,12 +46,7 @@ private final class MediaPlayerScrubbingNodeButton: ASDisplayNode, UIGestureReco
guard let gestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else { guard let gestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer else {
return !self.verticalPanEnabled return !self.verticalPanEnabled
} }
let translation = gestureRecognizer.translation(in: gestureRecognizer.view) return true
if self.verticalPanEnabled {
return abs(translation.x) > abs(translation.y) || translation.y > 0.0
} else {
return abs(translation.x) > abs(translation.y)
}
} }
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
@ -853,10 +848,14 @@ public final class MediaPlayerScrubbingNode: ASDisplayNode {
switch self.contentNodes { switch self.contentNodes {
case let .standard(node): case let .standard(node):
if let handleNodeContainer = node.handleNodeContainer, handleNodeContainer.isUserInteractionEnabled, handleNodeContainer.frame.insetBy(dx: 0.0, dy: -5.0).contains(point) { if let handleNodeContainer = node.handleNodeContainer, handleNodeContainer.isUserInteractionEnabled, handleNodeContainer.frame.insetBy(dx: 0.0, dy: -5.0).contains(point) {
if let handleNode = node.handleNode, handleNode.convert(handleNode.bounds, to: self).insetBy(dx: -5.0, dy: -5.0).contains(point) {
return handleNodeContainer.view return handleNodeContainer.view
} else { } else {
return nil return nil
} }
} else {
return nil
}
case let .custom(node): case let .custom(node):
if let handleNodeContainer = node.handleNodeContainer, handleNodeContainer.isUserInteractionEnabled, handleNodeContainer.frame.insetBy(dx: 0.0, dy: -5.0).contains(point) { if let handleNodeContainer = node.handleNodeContainer, handleNodeContainer.isUserInteractionEnabled, handleNodeContainer.frame.insetBy(dx: 0.0, dy: -5.0).contains(point) {
return handleNodeContainer.view return handleNodeContainer.view