2009-03-14 6 views

Répondre

0

Comme je ne suis pas familier avec le SDK iPhone lui-même, je ne suis pas sûr s'il existe des installations intégrées pour capturer des gestes non standard. Cependant, voici l'une des façons manuelles que vous pouvez faire.

This tutorial est pour Flash, mais fonctionne selon les mêmes principes de gestes. Chaque direction représente un nombre. Traçage d'un cercle avec le dispositif de pointage va générer une séquence de chiffres représentant les directions parcourues soit au fil du temps ou sur la distance, c'est à vous. Comparez cette séquence de nombres à une séquence prédéfinie représentant un cercle. S'ils correspondent, déclenchez un événement.

De nombreux didacticiels expliquent comment rendre des mouvements de ce type "flous" de sorte qu'un mouvement ponctuel moins précis soit nécessaire.

1

On dirait qu'un cas spécifique peut être assez simple à mettre en œuvre. Divisez la zone de saisie en quatre quadrants et suivez la position dans chaque quadrant. La séquence des quarts détermine si ils ont accompli ou voyagé dans un cercle.

pseudo-code pour décrire l'idée:

static touchKeeper; //touch, quadrant 
static touchIndex=0; 
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [[allTouches allObjects] objectAtIndex:0]; 
    touchKeeper[touchIndex].touch = touch; 
    touchKepper[touchIndex].quadrant = DetectQuadrant(touch)); 
    if (touchIndex > 3 && (touchKeeper[3].quadrant == touchKeeper[2].quadrant+1 == touchKeeper[1].quadrant+2 == touchKeeper[0].quadrant+3)) { 
    [self doCircleAction]; 
    touchIndex=0; 
    } 
    else touchIndex++; 
} 

L'idée est que vous avez seulement besoin d'identifier à peu près une touche particulière à une région. Donc, la routine quadrant serait quelque chose comme ceci:

int DetectQuadrant(UITouch *touch) { 
CGPoint point; 
point = [touch locationInView:self]; 
if (endPoint.x > X1 && endPoint.x < X2 && endPoint.Y > Y1 && endPoint.Y < Y2) 
    return QUAD1; 
} else etc 

-je utiliser comme un exemple quarts de cercle - clairement, vous pouvez dessiner un carré et de penser « cercle! ». La précision est améliorée en créant plus de régions dans la méthode Detect. L'idée principale est de penser en termes de séquences de régions afin d'obtenir le comportement souhaité sans complication excessive (comme la détection de la courbe de Bézier ou des non-sens similaires). Ce pseudo code est certainement brutal et je suis sûr qu'il y a une belle façon de finaliser l'implémentation. Je pensais à la «détection de mouvement circulaire» pour un projet sur lequel je travaille et c'est l'idée approximative que j'ai imaginée.

Profitez-en!

+0

Crédit lorsque le crédit est dû. Cette idée est basée sur un document d'IBM sur la détection des caractères et de l'écriture manuscrite où les recherches ont déterminé que seuls quelques points uniques étaient nécessaires pour identifier les caractères. Donc, au lieu de tracer 'E', l'OCR chercherait le moins de points de position uniques. –

Questions connexes