2011-07-16 10 views
6

Estoy usando Cocos2d para renderizar un sprite y UIGestureRecognizers para permitir al usuario desplazar, girar y escalar el sprite.Múltiples gestos para UIGestureRecognizers (iPhone, Cocos2d)

Tengo cada uno trabajando de manera aislada utilizando código como el siguiente:

UIPinchGestureRecognizer *pinchRecognizer = [[[UIPinchGestureRecognizer alloc] initWithTarget:layer action:@selector(handlePinchFrom:)] autorelease]; 
[viewController.view addGestureRecognizer:pinchRecognizer]; 

UIRotationGestureRecognizer *rotationRecognizer = [[[UIRotationGestureRecognizer alloc] initWithTarget:layer action:@selector(handleRotationFrom:)] autorelease]; 
[viewController.view addGestureRecognizer:rotationRecognizer]; 

Sin embargo, quiero tanto escalar y rotar el sprite si el usuario aprieta sus dedos mientras se gira (la aplicación Fotos hace esto, por ejemplo). Desafortunadamente, el reconocedor parece quedarse atascado en el modo "rotar" o "pellizcar", y no llamará a los dos manejadores al mismo tiempo :(

Así que, básicamente, quiero saber - ¿esto significa que yo? no se puede utilizar UIGestureRecognizers? ¿Puedo combinar dos reconocedores y hacer todas las acciones en un único controlador? ¿Tendré que subclase UIGestureRecognizer a ser algo así como "PinchAndRotateRecognizer".

Ayuda apreciado :)

Respuesta

27

Simplemente implemente gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer: en su delegado.

Tengo un UIPinchGestureRecognizer, un UIPanGestureRecognizer y un UIRotationGestureRecognizer configuración y quiero que todos funcionen al mismo tiempo. También tengo un UITapGestureRecognizer que hago no quiero ser reconocido simultáneamente. Todo lo que hice fue esto:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer 
{ 
    if (![gestureRecognizer isKindOfClass:[UITapGestureRecognizer class]] && ![otherGestureRecognizer isKindOfClass:[UITapGestureRecognizer class]]) { 
     return YES; 
    } 

    return NO; 
} 
-5

Sólo una el reconocedor de gestos puede estar "activo" al mismo tiempo. El que se dispara primero gana. Eso significa que no puede combinar UIPinchGestureRecognizer y UIRotationGestureRecognizer para lograr el efecto deseado.

Puede intentar subclasificar UIGestureRecognizer como dijo. ¡Lee las notas de subclases en la documentación!

+8

Eso no es verdad. Simplemente implemente gestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer: en su delegado, consulte la respuesta a continuación. –

Cuestiones relacionadas