2010-03-11 5 views
5

Je viens d'être déclaré avec le développement de l'iPhone et n'arrive pas à trouver la réponse que je cherche ce que je veux faire.touche le gestionnaire d'événements pour UIImageView

Il semble que je devrais être capable de créer un UIImageView par programme, puis de configurer un gestionnaire d'événements pour ses fonctions tactiles.

en C# je voudrais avoir quelque chose qui ressemble à

Bouton b = new Button(); b.Click + = mon code gestionnaire

en ce moment j'ai ce

CGRect myImageRect = CGRectMake(0.0f, 0.0f, 141.0f, 151.0f); 
UIImageView *myImage = [[UIImageView alloc] initWithFrame:myImageRect]; 

myImage.userInteractionEnabled = YES; 
[myImage setImage:[UIImage imageNamed:@"myImage.png"]]; 
myImage.opaque = YES; // explicitly opaque for performance 
[self.view addSubview:myImage]; 
[myImage release]; 

Que dois-je faire pour passer outre les événements tactiles?

grâce

Répondre

9

Bien que ce n'est pas la réponse complète à votre question, je pense que la solution suivante pourrait être mieux que de faire le « invisible bouton-solution » .. sous-classe simplement de UIImageView et remplacer la méthode suivante:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event 
{ 

//your UIImageView has been touched :) 

//event -> "A UIEvent object representing the event to which the touches belong." 

//touches -> "A set of UITouch instances in the event represented by event that represent the touches in the UITouchPhaseEnded phase." 

} 
Il suffit d'utiliser un UIButton personnalisé avec l'image comme image de fond.

+0

Vraiment, ce n'est pas la réponse que je recherchais.Mais il semble que la seule façon que je puisse trouver est d'utiliser l'héritage. Je suppose que C# m'a gâté au point où je pense que des méthodes comme celle-ci devraient être disponibles sans trop de travail. Cependant, merci. – madmik3

0

Je n'ai pas trouvé un moyen de le faire directement avec UIImageView. Mais si vous le sous-classez et remplacez la méthode nextResponder pour renvoyer un délégué sous votre contrôle, vous pouvez faire ce que vous recherchez. Exposez le délégué en tant que propriété de la sous-classe et vous pouvez ensuite transmettre un délégué pour les événements tactiles et le modifier à tout moment.

0

J'ai vu d'autres réponses suggérant de placer un bouton invisible sous UIImageView, en réglant la vue de l'image sur userInteractionEnabled: NO, et en laissant les touches passer au bouton.

3

5

J'ai une vue principale avec quelques icônes comme "à propos de" pour ouvrir une vue sur. Dans le contrôleur correspondant (vue principale) j'ai ajouté un gestionnaire d'événements pour touchesBegan. En outre, j'ai besoin de vérifier quelle vue a été "touchée", car il y a plus d'icônes sur la vue. Mon instance UIImageView est "aboutImg" et l'interaction de l'utilisateur doit être vérifiée (c'est-à-dire le constructeur de l'interface utilisateur -> attributs inspecteur de vue).

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 
    UITouch *touch = [touches anyObject]; 
    if ([touch view] == aboutImg){ 
     [self ShowAbout]; 
    } 
} 

Assurez-vous de cocher "Interactions utilisateur activées". Ceci est la solution la plus

+0

C'est la solution la plus simple. Je coche la case à cocher Interactions de l'utilisateur et la jette dans la sous-classe UITableViewCell pour saisir plusieurs touches dans la cellule. Travaillé parfait et facile. Ne doit pas sous-classer le UIImageView –

0

Vous devez rien à voir avec UIImageView, vous pouvez utiliser UIButton avec commande de type et ajouter contact à l'intérieur de l'action à elle ... mettre button.imageview setImage: -à-dire:

UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; 
btn.frame = CGRectMake(0,0,100,100); //edit for you own frame 
UIImage *img = [UIImage imageNamed:@"myimage.png"]; 
[button setImage:img forState:UIControlStateNormal]; 

Si vous voulez aller avec UIImageView, vous devez ajouter des gestes à votre imageview. Sinon, vous pouvez sous-classer votre UIImageView et ensuite utiliser les événements tactiles.

0

Le moyen le plus simple d'ajouter un événement onClick à un UIImageView ou à un UIView est d'y ajouter un outil de reconnaissance de gestes.

UIImage *myImage = [UIImage imageNamed:@"myImage.png"]; 
UIImageView *myImageView = [[UIImageView alloc] initWithImage: myImage]; 

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action: @selector(onImageViewClicked)]; 
singleTap.numberOfTapsRequired = 1; 
singleTap.numberOfTouchesRequired = 1; 
[self.myImageView addGestureRecognizer:singleTap]; 
[self.myImageView setUserInteractionEnabled:YES]; 
Questions connexes