Savoir sur quelle UIImageView on a cliquée

Sébastien M.Sébastien M. Membre
novembre 2011 modifié dans Vos applications #1
Bonsoir tout le monde.

Un question rapide dont la résolution est surement relativement simple.
Je viens de créer, grâce au framework "Assets Library" une série de vignette des vidéos de mon téléphone (comme quand on explore un événement dans l'application photo). Je souhaiterais que lorsque l'utilisateur clique sur la vignette, la vidéo se lance. Cependant, comme savoir sur quel UIImageView l'utilisateur a cliqué ?

Merci d'avance.

Réponses

  • Sébastien M.Sébastien M. Membre
    06:16 modifié #2
    Je viens de trouver. Il faut redéfinir la (ou les) méthode(s) de UIResponder :
    • touchesBegan:withEvent:
    • touchesMoved:withEvent:
    • touchesEnded:withEvent:
    • touchesCancelled:withEvent:


    Pour les UIImageView, il faut aussi penser à  faire :
    [imageView setUserInteractionEnabled:YES];
    
  • DrakenDraken Membre
    06:16 modifié #3
    Tu peux aussi associer une gesture aux UIImageView. Et récupérer la vue sélectionnée dans la méthode de traitement. Je t'écrirais un exemple de code demain. C'est l'heure d'aller dormir pour moi.
  • 06:16 modifié #4
    Ajouter des gestures à  chaque UIImageView n'est pas une bonne solution. ça implique l'instanciation de UITapGestureRecognizer à  gogo (même avec un principe de reusability, si on a 10 vignettes à  l'écran..)
    L'idéal serait de le faire dans la vue maà®tresse et vérifier quel UIImageView se trouve aux coordonnées du touché.
  • Sébastien M.Sébastien M. Membre
    06:16 modifié #5
    dans 1321605957:

    L'idéal serait de le faire dans la vue maà®tresse et vérifier quel UIImageView se trouve aux coordonnées du touché.

    C'est pas un peu galère le calcul de coordonnées dès que l'on a une UIScrollView ?
    Pour le moment, ce que j'ai fait, c'est que je donne à  chaque vignette un tag différent. Puis dans touchesBegan:withEvent: je regarde si l'utilisateur a touché une UIView ayant un tag différent de zéro (qui est le tag par défaut). Du coup, ça me permet de savoir quelle vignette j'ai touchée.

    <br />- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event<br />{<br />&nbsp; &nbsp; UITouch *touch;<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; touch = [touches anyObject];<br />&nbsp; &nbsp; [(MovieLibraryController *)m_controller playMovieForTag:[[touch view] tag]];<br />}<br />
    
  • novembre 2011 modifié #6
    dans 1321610893:

    dans 1321605957:

    L'idéal serait de le faire dans la vue maà®tresse et vérifier quel UIImageView se trouve aux coordonnées du touché.

    C'est pas un peu galère le calcul de coordonnées dès que l'on a une UIScrollView ?


    What? Bha non vu que si tu as bien codé ton composant tu devrais logiquement avoir une méthode "-(NSArray)visibleImageViews" qui te retournes tes UIImageView visible à  l'écran.

    <br />- (void)handleTapGestureRecognizer:(UITapGestureRecognizer*)aTapGestureRecognizer<br />{<br />	if([aTapGestureRecognizer state] == UIGestureRecognizerStateEnded)<br />	{<br />		CGPoint touchLocation = [aTapGestureRecognizer locationInView:self];<br />		for(UIImageView* anImageView in [self visibleImageViews])<br />		{<br />			if(CGRectContainsPoint([anImageView frame], touchLocation)<br />			{<br />				// &#039;anImageView&#039; been tapped.<br />				break;<br />			}<br />		}<br />	}<br />}<br />
    


    J'ai toujours fait ça pour mes composants de ce type qui appliquent (ou pas) un principe de reusability, et ça fonctionne très bien (et c'est très rapide).
  • AliGatorAliGator Membre, Modérateur
    06:16 modifié #7
    Pareil.
Connectez-vous ou Inscrivez-vous pour répondre.