diff --git a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m index 1c05c848c..91594fc03 100644 --- a/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m +++ b/Signal/src/ViewControllers/ConversationView/Cells/OWSMessageCell.m @@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN -@interface OWSMessageCell () +@interface OWSMessageCell () // The nullable properties are created as needed. // The non-nullable properties are so frequently used that it's easier @@ -81,6 +81,7 @@ NS_ASSUME_NONNULL_BEGIN UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanGesture:)]; + pan.delegate = self; [self.contentView addGestureRecognizer:pan]; } @@ -497,6 +498,17 @@ NS_ASSUME_NONNULL_BEGIN [self.messageBubbleView handlePanGesture:sender]; } +-(BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer +{ + LKVoiceMessageView *voiceMessageView = self.viewItem.lastAudioMessageView; + if (![gestureRecognizer isKindOfClass:UIPanGestureRecognizer.class] || voiceMessageView == nil) { return NO; } + UIPanGestureRecognizer *panGestureRecognizer = (UIPanGestureRecognizer *)gestureRecognizer; + CGPoint location = [panGestureRecognizer locationInView:voiceMessageView]; + if (!CGRectContainsPoint(voiceMessageView.bounds, location)) { return NO; } + CGPoint velocity = [panGestureRecognizer velocityInView:voiceMessageView]; + return fabs(velocity.x) > fabs(velocity.y); +} + - (BOOL)isGestureInCellHeader:(UIGestureRecognizer *)sender { OWSAssertDebug(self.viewItem);