mirror of
https://github.com/oxen-io/session-ios.git
synced 2023-12-13 21:30:14 +01:00
Disabled tableview scroll when swiping to reply in a conversation
This commit is contained in:
parent
67e8191c2c
commit
f0fb4529c8
|
@ -468,6 +468,15 @@ extension ConversationVC : InputViewDelegate, MessageCellDelegate, ContextMenuAc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func handleViewItemSwiped(_ viewItem: ConversationViewItem, state: SwipeState) {
|
||||||
|
switch state {
|
||||||
|
case .began:
|
||||||
|
messagesTableView.isScrollEnabled = false
|
||||||
|
case .ended, .cancelled:
|
||||||
|
messagesTableView.isScrollEnabled = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func showFailedMessageSheet(for tsMessage: TSOutgoingMessage) {
|
func showFailedMessageSheet(for tsMessage: TSOutgoingMessage) {
|
||||||
let thread = self.thread
|
let thread = self.thread
|
||||||
|
|
|
@ -1,5 +1,11 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
|
public enum SwipeState {
|
||||||
|
case began
|
||||||
|
case ended
|
||||||
|
case cancelled
|
||||||
|
}
|
||||||
|
|
||||||
class MessageCell : UITableViewCell {
|
class MessageCell : UITableViewCell {
|
||||||
weak var delegate: MessageCellDelegate?
|
weak var delegate: MessageCellDelegate?
|
||||||
var viewItem: ConversationViewItem? { didSet { update() } }
|
var viewItem: ConversationViewItem? { didSet { update() } }
|
||||||
|
@ -55,6 +61,7 @@ protocol MessageCellDelegate : AnyObject {
|
||||||
func handleViewItemLongPressed(_ viewItem: ConversationViewItem)
|
func handleViewItemLongPressed(_ viewItem: ConversationViewItem)
|
||||||
func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer)
|
func handleViewItemTapped(_ viewItem: ConversationViewItem, gestureRecognizer: UITapGestureRecognizer)
|
||||||
func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem)
|
func handleViewItemDoubleTapped(_ viewItem: ConversationViewItem)
|
||||||
|
func handleViewItemSwiped(_ viewItem: ConversationViewItem, state: SwipeState)
|
||||||
func showFullText(_ viewItem: ConversationViewItem)
|
func showFullText(_ viewItem: ConversationViewItem)
|
||||||
func openURL(_ url: URL)
|
func openURL(_ url: URL)
|
||||||
func handleReplyButtonTapped(for viewItem: ConversationViewItem)
|
func handleReplyButtonTapped(for viewItem: ConversationViewItem)
|
||||||
|
|
|
@ -466,9 +466,12 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
@objc private func handlePan(_ gestureRecognizer: UIPanGestureRecognizer) {
|
||||||
|
guard let viewItem = viewItem else { return }
|
||||||
let viewsToMove = [ bubbleView, profilePictureView, replyButton, timerView, messageStatusImageView ]
|
let viewsToMove = [ bubbleView, profilePictureView, replyButton, timerView, messageStatusImageView ]
|
||||||
let translationX = gestureRecognizer.translation(in: self).x.clamp(-CGFloat.greatestFiniteMagnitude, 0)
|
let translationX = gestureRecognizer.translation(in: self).x.clamp(-CGFloat.greatestFiniteMagnitude, 0)
|
||||||
switch gestureRecognizer.state {
|
switch gestureRecognizer.state {
|
||||||
|
case .began:
|
||||||
|
delegate?.handleViewItemSwiped(viewItem, state: .began)
|
||||||
case .changed:
|
case .changed:
|
||||||
// The idea here is to asymptotically approach a maximum drag distance
|
// The idea here is to asymptotically approach a maximum drag distance
|
||||||
let damping: CGFloat = 20
|
let damping: CGFloat = 20
|
||||||
|
@ -486,8 +489,10 @@ final class VisibleMessageCell : MessageCell, LinkPreviewViewDelegate {
|
||||||
previousX = translationX
|
previousX = translationX
|
||||||
case .ended, .cancelled:
|
case .ended, .cancelled:
|
||||||
if abs(translationX) > VisibleMessageCell.swipeToReplyThreshold {
|
if abs(translationX) > VisibleMessageCell.swipeToReplyThreshold {
|
||||||
|
delegate?.handleViewItemSwiped(viewItem, state: .ended)
|
||||||
reply()
|
reply()
|
||||||
} else {
|
} else {
|
||||||
|
delegate?.handleViewItemSwiped(viewItem, state: .cancelled)
|
||||||
resetReply()
|
resetReply()
|
||||||
}
|
}
|
||||||
default: break
|
default: break
|
||||||
|
|
Loading…
Reference in a new issue