Fix conflicting pan gestures

pull/347/head
nielsandriesse 4 years ago
parent ebd91dcc73
commit a9eb407cc4

@ -7,6 +7,7 @@
// Resending failed messages // Resending failed messages
// Link previews // Link previews
// Slight paging glitch // Slight paging glitch
// Scrolling bug
final class ConversationVC : BaseVC, ConversationViewModelDelegate, UITableViewDataSource, UITableViewDelegate { final class ConversationVC : BaseVC, ConversationViewModelDelegate, UITableViewDataSource, UITableViewDelegate {
let thread: TSThread let thread: TSThread

@ -19,6 +19,12 @@ final class VisibleMessageCell : MessageCell, UITextViewDelegate, BodyTextViewDe
private lazy var messageStatusImageViewWidthConstraint = messageStatusImageView.set(.width, to: VisibleMessageCell.messageStatusImageViewSize) private lazy var messageStatusImageViewWidthConstraint = messageStatusImageView.set(.width, to: VisibleMessageCell.messageStatusImageViewSize)
private lazy var messageStatusImageViewHeightConstraint = messageStatusImageView.set(.height, to: VisibleMessageCell.messageStatusImageViewSize) private lazy var messageStatusImageViewHeightConstraint = messageStatusImageView.set(.height, to: VisibleMessageCell.messageStatusImageViewSize)
private lazy var panGestureRecognizer: UIPanGestureRecognizer = {
let result = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
result.delegate = self
return result
}()
private var positionInCluster: Position? { private var positionInCluster: Position? {
guard let viewItem = viewItem else { return nil } guard let viewItem = viewItem else { return nil }
if viewItem.isFirstInCluster { return .top } if viewItem.isFirstInCluster { return .top }
@ -178,8 +184,6 @@ final class VisibleMessageCell : MessageCell, UITextViewDelegate, BodyTextViewDe
doubleTapGestureRecognizer.numberOfTapsRequired = 2 doubleTapGestureRecognizer.numberOfTapsRequired = 2
addGestureRecognizer(doubleTapGestureRecognizer) addGestureRecognizer(doubleTapGestureRecognizer)
tapGestureRecognizer.require(toFail: doubleTapGestureRecognizer) tapGestureRecognizer.require(toFail: doubleTapGestureRecognizer)
let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handlePan))
panGestureRecognizer.delegate = self
addGestureRecognizer(panGestureRecognizer) addGestureRecognizer(panGestureRecognizer)
} }
@ -360,7 +364,7 @@ final class VisibleMessageCell : MessageCell, UITextViewDelegate, BodyTextViewDe
} }
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let panGestureRecognizer = gestureRecognizer as? UIPanGestureRecognizer { if gestureRecognizer == panGestureRecognizer {
let v = panGestureRecognizer.velocity(in: self) let v = panGestureRecognizer.velocity(in: self)
guard v.x < 0 else { return false } guard v.x < 0 else { return false }
return abs(v.x) > abs(v.y) return abs(v.x) > abs(v.y)

@ -2,6 +2,9 @@
final class MessagesTableView : UITableView { final class MessagesTableView : UITableView {
var keyboardHeight: CGFloat = 0 var keyboardHeight: CGFloat = 0
// Overriding contentInset and adjustedContentInset is to keep them from changing when the
// conversation view controller is dismissed.
override var contentInset: UIEdgeInsets { override var contentInset: UIEdgeInsets {
get { UIEdgeInsets(top: 0, leading: 0, bottom: MessagesTableView.baselineContentInset + keyboardHeight, trailing: 0) } get { UIEdgeInsets(top: 0, leading: 0, bottom: MessagesTableView.baselineContentInset + keyboardHeight, trailing: 0) }
set { } set { }
@ -34,4 +37,13 @@ final class MessagesTableView : UITableView {
contentInsetAdjustmentBehavior = .never contentInsetAdjustmentBehavior = .never
keyboardDismissMode = .interactive keyboardDismissMode = .interactive
} }
override func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if gestureRecognizer == panGestureRecognizer {
let v = panGestureRecognizer.velocity(in: self)
return abs(v.x) < 120
} else {
return true
}
}
} }

Loading…
Cancel
Save