2010-03-11 13 views
5

Me acaban de decir con el desarrollo de iPhone y parece que no puedo encontrar la respuesta que estoy buscando, lo que quiero hacer.toca el controlador de eventos para UIImageView

Parece que debería ser capaz de crear programáticamente un UIImageView y luego configurar un controlador de eventos para sus funciones táctiles.

en C# me gustaría tener algo que se parece a

del botón b = new Button(); b.Click + = mi código del controlador

ahora tengo unas pocas cosas

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]; 

¿Qué necesito hacer para anular los eventos de toque?

gracias

Respuesta

9

Si bien no es la respuesta completa a su pregunta, creo que la siguiente solución podría ser mejor que hacer el "botón invisible-solución" .. simplemente subclase de UIImageView y anular el siguiente método:

-(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." 

} 

espero que esto ayude ...

+0

Realmente esta no es la respuesta que estaba buscando.Pero parece que la única forma en que puedo encontrar es usar la herencia. Supongo que C# me ha echado a perder hasta el punto en que creo que métodos como este deberían estar disponibles sin tanto trabajo. Sin embargo, gracias. – madmik3

0

no han encontrado una manera de hacerlo directamente con UIImageView. Pero si lo subclase y anule el método nextResponder para devolver un delegado bajo su control, puede hacer lo que está buscando. Exponga al delegado como una propiedad de la subclase y luego puede pasar un delegado para los eventos táctiles y cambiarlo en cualquier momento.

0

He visto otras respuestas que sugieren poner un botón invisible debajo del UIImageView, establecer la vista de la imagen en userInteractionEnabled: NO y dejar que los toques pasen al botón.

3

Simplemente use un UIButton personalizado con la imagen como imagen de fondo.

5

Tengo una vista principal con algunos iconos como "sobre" para abrir una vista de acercamiento. En el controlador correspondiente (vista principal) agregué un controlador de eventos para touchesBegan. Además, debo verificar qué vista se ha "tocado", ya que hay más íconos en la vista. Mi instancia de UIImageView es "aboutImg" y es necesario verificar la interacción del usuario (es decir, el constructor de UI -> atributos del inspector de vista).

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

Asegúrate de marcar las "Interacciones de usuario habilitadas". Esta es la solución más fácil

+0

Esta es la solución más fácil. Marque la casilla de verificación Interacciones de usuario y la arrojé en la UITableViewCell subclase para tomar varios toques en la celda. Funcionó perfecto y fácil. Ne necesidad de subclase el UIImageView –

0

Es necesario nada que ver con UIImageView, puede utilizar UIButton con el tipo de medida y añadir un toque en el interior de la acción a ella ... establecer setImage button.imageview: es decir:

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 quieres usar UIImageView, entonces necesitas agregar gestos a tu imagen. de lo contrario, puedes subclasificar tu UIImageView y luego usar eventos táctiles.

0

La manera más fácil de agregar un evento onClick a un UIImageView oa un UIView es agregarle un reconocedor de gesto de toque.

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]; 
Cuestiones relacionadas