refactored gesture recognition for iOS
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user