Configurable allowable movement. Also re-enabled shouldRecognizeSimultaneouslyWithGestureRecognizer:

This commit is contained in:
Claus Höfele
2014-03-08 16:54:21 +01:00
parent 39827bfc4a
commit 482eb0e1fc
3 changed files with 13 additions and 5 deletions

View File

@@ -18,11 +18,15 @@ typedef enum {
/**
A discreet gesture recognizer that sends action messages for touch down
(UIGestureRecognizerStateBegan), touch up for a tap (UIGestureRecognizerStateRecognized,
isLongPress == NO), and touch up for a long press (UIGestureRecognizerStateRecognized, isLongPress == NO).
CCHLinkGestureRecognizerResultTap), touch up for a long press (UIGestureRecognizerStateRecognized,
CCHLinkGestureRecognizerResultLongPress), and touch up when gesture has failed (UIGestureRecognizerStateRecognized,
CCHLinkGestureRecognizerResultFailed).
*/
@interface CCHLinkGestureRecognizer : UIGestureRecognizer
@property (nonatomic, assign) CFTimeInterval minimumPressDuration;
@property (nonatomic, assign) CGFloat allowableMovement;
@property (nonatomic, assign) CCHLinkGestureRecognizerResult result;
@end

View File

@@ -10,8 +10,6 @@
#import <UIKit/UIGestureRecognizerSubclass.h>
#define MAX_SQUARED_DISTANCE (10 * 10)
@interface CCHLinkGestureRecognizer ()
@property (nonatomic, assign) CGPoint initialPoint;
@@ -43,7 +41,12 @@
- (void)setUp
{
// Same defaults as UILongPressGestureRecognizer
self.minimumPressDuration = 0.5;
self.allowableMovement = 10;
self.result = CCHLinkGestureRecognizerResultUnknown;
self.initialPoint = CGPointZero;
}
- (void)reset
@@ -107,7 +110,7 @@
CGFloat yDistance = (self.initialPoint.y - point.y);
CGFloat squaredDistance = (xDistance * xDistance) + (yDistance * yDistance);
BOOL isClose = (squaredDistance <= MAX_SQUARED_DISTANCE);
BOOL isClose = (squaredDistance <= (self.allowableMovement * self.allowableMovement));
return isClose;
}

View File

@@ -43,8 +43,9 @@
{
self.linkRanges = [NSMutableArray array];
self.touchDownCharacterIndex = -1;
CCHLinkGestureRecognizer *linkGestureRecognizer = [[CCHLinkGestureRecognizer alloc] initWithTarget:self action:@selector(linkAction:)];
linkGestureRecognizer.delegate = self;
[self addGestureRecognizer:linkGestureRecognizer];
}