refactored gesture recognition for iOS

This commit is contained in:
techdragon.nguyen@gmail.com
2012-04-12 11:53:42 +00:00
parent 41ccf2e3d9
commit 405df8bd15

View File

@@ -99,73 +99,68 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
- (void) initGestureRecognizers { - (void) initGestureRecognizers {
UIGestureRecognizer *recognizer; UISwipeGestureRecognizer *threeFingerSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapDirectionalPad:)];
threeFingerSwipe.numberOfTouchesRequired = 3;
/* threeFingerSwipe.direction = UISwipeGestureRecognizerDirectionRight;
Create a 3 fingers left swipe gesture recognizer to handle left trigger operations [self addGestureRecognizer:threeFingerSwipe];
*/ [threeFingerSwipe release];
UISwipeGestureRecognizer *threeFingerSwipeLeftRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleNextPhase:)];
threeFingerSwipeLeftRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
threeFingerSwipeLeftRecognizer.numberOfTouchesRequired = 3;
[self addGestureRecognizer: threeFingerSwipeLeftRecognizer]; UISwipeGestureRecognizer *swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapActionButtons:)];
[threeFingerSwipeLeftRecognizer release];
/* swipeRecognizer.numberOfTouchesRequired = 2;
Create a 3 fingers right swipe gesture recognizer to handle opening and closing of hand. (right trigger) [swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionRight];
*/ [self addGestureRecognizer: swipeRecognizer];
UISwipeGestureRecognizer *threeFingerSwipeRightRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleHand:)]; [swipeRecognizer requireGestureRecognizerToFail: threeFingerSwipe];
threeFingerSwipeRightRecognizer.direction = UISwipeGestureRecognizerDirectionRight; [swipeRecognizer release];
threeFingerSwipeRightRecognizer.numberOfTouchesRequired = 3;
[self addGestureRecognizer: threeFingerSwipeRightRecognizer]; threeFingerSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapDirectionalPad:)];
[threeFingerSwipeRightRecognizer release]; threeFingerSwipe.numberOfTouchesRequired = 3;
threeFingerSwipe.direction = UISwipeGestureRecognizerDirectionLeft;
[self addGestureRecognizer:threeFingerSwipe];
[threeFingerSwipe release];
/* swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapActionButtons:)];
Create a 2 fingers left swipe gesture recognizer to handle interruption. (square key) swipeRecognizer.numberOfTouchesRequired = 2;
*/ [swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionLeft];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleInterrupt:)]; [self addGestureRecognizer: swipeRecognizer];
((UISwipeGestureRecognizer*)recognizer).direction = UISwipeGestureRecognizerDirectionLeft; [swipeRecognizer requireGestureRecognizerToFail: threeFingerSwipe];
((UISwipeGestureRecognizer*)recognizer).numberOfTouchesRequired = 2; [swipeRecognizer release];
[self addGestureRecognizer:recognizer];
[recognizer requireGestureRecognizerToFail: threeFingerSwipeLeftRecognizer];
[recognizer release];
threeFingerSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapDirectionalPad:)];
threeFingerSwipe.numberOfTouchesRequired = 3;
threeFingerSwipe.direction = UISwipeGestureRecognizerDirectionUp;
[self addGestureRecognizer:threeFingerSwipe];
[threeFingerSwipe release];
/* swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapActionButtons:)];
Create a 2 fingers right swipe gesture recognizer. (circle key) swipeRecognizer.numberOfTouchesRequired = 2;
*/ [swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionUp];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSecondary:)]; [self addGestureRecognizer: swipeRecognizer];
((UISwipeGestureRecognizer*)recognizer).direction = UISwipeGestureRecognizerDirectionRight; [swipeRecognizer requireGestureRecognizerToFail: threeFingerSwipe];
((UISwipeGestureRecognizer*)recognizer).numberOfTouchesRequired = 2; [swipeRecognizer release];
[self addGestureRecognizer:recognizer];
[recognizer requireGestureRecognizerToFail: threeFingerSwipeRightRecognizer];
[recognizer release];
/* threeFingerSwipe = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapDirectionalPad:)];
Create a 2 fingers down swipe gesture recognizer to handle interruption. (cross key) threeFingerSwipe.numberOfTouchesRequired = 3;
*/ threeFingerSwipe.direction = UISwipeGestureRecognizerDirectionDown;
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleOK:)]; [self addGestureRecognizer:threeFingerSwipe];
((UISwipeGestureRecognizer*)recognizer).direction = UISwipeGestureRecognizerDirectionDown; [threeFingerSwipe release];
((UISwipeGestureRecognizer*)recognizer).numberOfTouchesRequired = 2;
[self addGestureRecognizer:recognizer];
[recognizer release];
swipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(mapActionButtons:)];
/* swipeRecognizer.numberOfTouchesRequired = 2;
Create a 2 fingers up swipe gesture recognizer. (triangle key) [swipeRecognizer setDirection:UISwipeGestureRecognizerDirectionDown];
*/ [self addGestureRecognizer: swipeRecognizer];
recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleCancel:)]; [swipeRecognizer requireGestureRecognizerToFail: threeFingerSwipe];
((UISwipeGestureRecognizer*)recognizer).direction = UISwipeGestureRecognizerDirectionUp; [swipeRecognizer release];
((UISwipeGestureRecognizer*)recognizer).numberOfTouchesRequired = 2;
[self addGestureRecognizer:recognizer];
[recognizer release];
/* /*
Create a recognizer for the select key functionality Create a recognizer for the select key functionality
*/ */
UILongPressGestureRecognizer *selectKeyRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleSelectKey:)]; UILongPressGestureRecognizer *selectKeyRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleSelectKey:)];
selectKeyRecognizer.minimumPressDuration =2; selectKeyRecognizer.minimumPressDuration = 2;
selectKeyRecognizer.numberOfTouchesRequired = 2; selectKeyRecognizer.numberOfTouchesRequired = 2;
[self addGestureRecognizer:selectKeyRecognizer]; [self addGestureRecognizer:selectKeyRecognizer];
@@ -178,6 +173,11 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
[menuKeyRecognizer requireGestureRecognizerToFail: selectKeyRecognizer]; [menuKeyRecognizer requireGestureRecognizerToFail: selectKeyRecognizer];
[self addGestureRecognizer:menuKeyRecognizer]; [self addGestureRecognizer:menuKeyRecognizer];
/*
UIPinchGestureRecognizer *pinchZoomRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(handlePinchZoom:)];
[self addGestureRecognizer:pinchZoomRecognizer];
[pinchZoomRecognizer release];
*/
/* /*
Create a single tap recognizer to select the nearest object. Create a single tap recognizer to select the nearest object.
@@ -196,12 +196,6 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
[self addGestureRecognizer: panGestureRecognizer]; [self addGestureRecognizer: panGestureRecognizer];
[panGestureRecognizer release]; [panGestureRecognizer release];
/*
Use the pinch gesture recognizer to zoom in and out of a location on the screen.
*/
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchDetected:)];
[self addGestureRecognizer: pinchGestureRecognizer];
[pinchGestureRecognizer release];
[menuKeyRecognizer release]; [menuKeyRecognizer release];
[selectKeyRecognizer release]; [selectKeyRecognizer release];
@@ -395,7 +389,16 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
#pragma mark - #pragma mark -
#pragma mark Gesture Recognizer callbacks
- (void)displayGameMenu
{
g_engine->LeftClicked(-1, -1); // set the click pressed to offscreen
g_engine->HoldKey_NoRepeat( JGE_BTN_MENU);
[self performSelector:@selector(resetInput) withObject: nil afterDelay: 0.1];
}
- (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer - (BOOL) gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{ {
@@ -428,6 +431,7 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
return distance; return distance;
} }
#pragma mark Gesture Recognizer callbacks
- (void)handlePanMotion: (UIPanGestureRecognizer *) panGesture - (void)handlePanMotion: (UIPanGestureRecognizer *) panGesture
{ {
@@ -510,15 +514,13 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
} }
/* implement a zoom in /out function call */ /* implement a zoom in /out function call */
- (IBAction)pinchDetected:(UIGestureRecognizer *)sender { - (void) pinchDetected:(UIGestureRecognizer *)sender {
/* CGFloat scale = [(UIPinchGestureRecognizer *)sender scale];
CGFloat scale = CGFloat velocity = [(UIPinchGestureRecognizer *)sender velocity];
[(UIPinchGestureRecognizer *)sender scale];
CGFloat velocity =
[(UIPinchGestureRecognizer *)sender velocity];
g_engine->Zoom( scale, velocity ); // g_engine->Zoom( scale, velocity );
*/ if ( scale > 1.0 && ( ( velocity * velocity ) > 900))
[self displayGameMenu];
} }
@@ -530,13 +532,6 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
[self performSelector:@selector(resetInput) withObject: nil afterDelay: 0.1]; [self performSelector:@selector(resetInput) withObject: nil afterDelay: 0.1];
} }
- (void)displayGameMenu
{
g_engine->LeftClicked(-1, -1); // set the click pressed to offscreen
g_engine->HoldKey_NoRepeat( JGE_BTN_MENU);
[self performSelector:@selector(resetInput) withObject: nil afterDelay: 0.1];
}
- (void)handleMenuWithLongPress:(UILongPressGestureRecognizer *)recognizer { - (void)handleMenuWithLongPress:(UILongPressGestureRecognizer *)recognizer {
if (recognizer.state == UIGestureRecognizerStateEnded) { if (recognizer.state == UIGestureRecognizerStateEnded) {
[self displayGameMenu]; [self displayGameMenu];
@@ -564,6 +559,54 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
g_engine->HoldKey_NoRepeat(JGE_BTN_CANCEL); g_engine->HoldKey_NoRepeat(JGE_BTN_CANCEL);
} }
/*
Action Buttons are the PSP triangle, cross, square and circle buttons
*/
- (void)mapActionButtons: (UISwipeGestureRecognizer *) recognizer
{
switch ([recognizer direction]) {
case UISwipeGestureRecognizerDirectionRight:
[self handleSecondary: recognizer];
break;
case UISwipeGestureRecognizerDirectionLeft:
[self handleInterrupt:recognizer];
break;
case UISwipeGestureRecognizerDirectionUp:
[self handleCancel:recognizer];
break;
case UISwipeGestureRecognizerDirectionDown:
[self handleOK: nil];
break;
default:
// ignore anything else
break;
}
}
/*
map the d-Pad to swipe actions.
*/
- (void)mapDirectionalPad: (UISwipeGestureRecognizer *) recognizer
{
switch ([recognizer direction]) {
case UISwipeGestureRecognizerDirectionRight:
[self handleHand: recognizer];
break;
case UISwipeGestureRecognizerDirectionLeft:
[self handleNextPhase:recognizer];
break;
default:
// ignore anything else
break;
}
}
#pragma mark - #pragma mark -
@@ -700,10 +743,10 @@ static NSString *_MY_AD_WHIRL_APPLICATION_KEY_IPAD = @"2e70e3f3da40408588b9a3170
//(in landscape mode): //(in landscape mode):
//Same explanation as the one in the method "adjustAdSize" for the Ad's width //Same explanation as the one in the method "adjustAdSize" for the Ad's width
int screenWidth = [viewController.parentViewController.view bounds].size.width; int screenWidth = [viewController.parentViewController.view bounds].size.width;
float yOffset = [viewController.parentViewController.view bounds].size.height - 50; float yOffset = [viewController.parentViewController.view bounds].size.height - adSize.height;
if ( isLandscape ) if ( isLandscape )
{ {
yOffset = screenWidth - 50; yOffset = screenWidth - adSize.height;
screenWidth = [viewController.parentViewController.view bounds].size.height; screenWidth = [viewController.parentViewController.view bounds].size.height;
} }