[Cocoa Touch] TapDetectingImageView

Sethii

Membre confirmé
2 Juillet 2011
51
1
Bonjour à tous,

Je me suis lancé dans mes premiers essais et évidemment, je commence à butter sur les premiers problèmes (et vous serez d'accord avec moi, pas les derniers).

J'ai trouvé un exemple qui me permet de déplacer un Imageview dans un ScrollView.

L'étape suivante c'est évidemment de réagir au click sur cette image et la ... visiblement c'est moins simple. J'ai trouvé des références sur le web à un outil made in Apple : TapDetectingImageView mais étonnement, il ne semble pas implémenté dans Cocoa.

Pour ma culture générale : kesako ?

Deuxièmement, avant de poursuivre dans cette voie, je vais expliquer en 2 mots ce que je cherche à faire.

L'idée serait de programmer une zone scollable et zoomable dans laquelle serait présent différents textes et liens (un peu comme un diagramme). Il faudrait pouvoir cliquer sur soit un texte, soit un lien et déclencher une action.

J'avais penser comme solution :
- créer une zone image scrollable
- y dessiner les objets
- intercepter les clicks en repérant par exemple la position
- déterminer l'objet le plus proche
- déclencher le traitement approprié.

Qu'en pensez-vous ?

Merci.

Sethy
 
Oui tu as plusieurs façons de faire ça, ton titre "TapDetectingImageView", suggère de sous-classer une UIImageView pour y implémenter la méthode (void)touchesBegan:withEvent:.

Crois-moi, c'est pas la première chose à faire, en effet tu peux dans la plupart des cas obtenir ce que tu veux en utilisant un UIButton.

Si tu passes par IB (enfin, un .xib), ajoute des UIButton de type Custom à ta view, en faisant correspondre une IBAction sur l'évènement TouchUpInside de ton UIButton.
Si tu passes par le code :

UIButton *tonButton = [UIButton buttonWithType:UIButtonTypeCustom];
[tonButton setFrame:CGRectMake(x, y, size, width)];
[tonButton addTarget:self action:mad:selector(taMethode:) forControlEvents:UIControlEventTouchUpInside];
[taScrollView addSubview:tonButton];


Pour faire simple, un UIButton de type Custom, tu peux lui attribuer l'image de fond que tu veux, mais de base il est transparent et intercepte quand même les évènements, souvent vaut mieux en passer par là plutôt que de chercher à directement sous-classer des UIView pour qu'elles interceptent les touches.

J'avoue qu'une UIImageView zoomable avec des boutons dedans, ça ne m'est jamais arrivé de le faire ; mon code doit être foireux d'ailleurs puisque ça implique sûrement de recalculer les frames des buttons dès que le niveau de zoom change, je ne sais pas si c'est fait automatiquement si tu ajoutes les buttons comme subviews de ta UIImageView plutôt que de ta UIScrollView.
 
Merci beaucoup pour ce coup de pouce.

J'ai encore du mal à le faire apparaiître sans une ScrollView, mais d'une manière générale que vaut-il mieux faire ? Créer tout via IB ou au contraire faire le tout via code ?

---------- Nouveau message ajouté à 18h23 ---------- Le message précédent a été envoyé à 17h52 ----------

Voilà, c'est oki. J'avais oublié un <UIScrollViewDelegate> dans mon ViewController.

Merci beaucoup.