2011-09-11 3 views
0

Pour UITapGestureRecognizer, vous pouvez définir le nombre de prises nécessaires pour contrôler la reconnaissance de UITapGestureRecognizer. Si vous définissez numberOfTapsRequired sur 2 et que l'utilisateur tape une seule fois, le UITapGestureRecognizer ne sera pas déclenché.Comment contrôler la reconnaissance de UIPanGestureRecognizer?

Ma question est: Qu'en est-il de UIPanGestureRecognizer? Comment contrôler sa reconnaissance?

J'ai une vue. Une fois que je lui ai assigné un UIPanGestureRecognizer, tout glissement va déclencher l'action. Mais ce que je veux c'est seulement le glisser dans l'axe X. Et pour le glissement d'axe non-X, tous les événements tactiles doivent être envoyés aux autres vues en dessous.

Comment puis-je le faire?

THanks

Répondre

2

Définir son délégué et mettre en œuvre

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer; 

Ensuite, utilisez

- (CGPoint)velocityInView:(UIView *)view; 

sur le geste de reconnaissance pour calculer si le geste de reconnaissance doit traiter ou non.

0
UIView *holderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, image.size.width, image.size.height)]; 
UIImageView *imageview = [[UIImageView alloc] initWithFrame:[holderView frame]]; 
[imageview setImage:image]; 
[holderView addSubview:imageview]; 

UIPinchGestureRecognizer *pinchRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(scale:)]; 
[pinchRecognizer setDelegate:self]; 
[holderView addGestureRecognizer:pinchRecognizer]; 

UIRotationGestureRecognizer *rotationRecognizer = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotate:)]; 
[rotationRecognizer setDelegate:self]; 
[holderView addGestureRecognizer:rotationRecognizer]; 

UIPanGestureRecognizer *panRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(move:)]; 
[panRecognizer setMinimumNumberOfTouches:1]; 
[panRecognizer setMaximumNumberOfTouches:1]; 
[panRecognizer setDelegate:self]; 
[holderView addGestureRecognizer:panRecognizer]; 

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
[tapRecognizer setNumberOfTapsRequired:1]; 
[tapRecognizer setDelegate:self]; 
[holderView addGestureRecognizer:tapRecognizer]; 

[self.view addSubview:holderView]; 

Raees

+0

Bienvenue à SO! Ajouter une explication s'il vous plaît. – atxe

0

Supposons que votre gestureRecognizer déclenche l'action _panRecogPanned ci-dessous. Vous pouvez voir comment le centre d'une sous-vue (la vue qui porte la reconnaissance de mouvement elle-même) se déplace après la transition. Pour désactiver le panoramique sur l'axe y, vous définissez simplement le centre comme le nouveau centre calculé, tandis que la translation.y est omise. Pour déplacer d'autres sous-vues sur l'axe des ordonnées, obtenir leur cadre, mettre à jour leur propriété origin.x et réinitialiser le cadre, elles ne doivent suivre votre doigt que sur l'axe des ordonnées.

- (IBAction)_panRecogPanned:(id)sender{ 

    CGPoint translation = [_panRecog translationInView:_statementFilterView]; 

    //This subview only moves horizontally 
    _panRecog.view.center = CGPointMake(translation.x + _panRecog.view.center.x, _panRecog.view.center.y); 

    //This subview only moves vertically 
    CGRect newFrame = anotherSubview.frame; 
    newFrame.origin.y = anotherSubview.frame.origin.y + translation.y; 
    anotherSubview.frame = newFrame; 

    [_panRecog setTranslation:CGPointMake(0, 0) inView:self.view]; 
} 
Questions connexes