que objective iphone cocoa-touch uikit uiimageview

iphone - objective - uikit ios



¿Hay alguna manera de hacer un UIButton invisible que todavía esté "allí" y capturar eventos táctiles para mi UIImageView? (11)

Pensé que era inteligente y simplemente coloqué un UIButton transparente sobre un UIImageView con el tamaño de marco exacto, para poder conectarlo fácilmente con cualquier evento que me guste, por ejemplo, TouchUpInside, y hacer que llame un método de acción de un controlador de vista cuando El usuario lo toca. Bueno, funciona hasta que el alfa está por debajo de 0.1f. Si hago 0.01f, no funcionará. Así que para que funcione, cuando se mira mucho tiempo en la pantalla, verá brillar a través de 0.1f de alfa. Y eso es totalmente asqueroso;)

Parece que el iPhone OS intenta ser inteligente y no detectará eventos en el botón si no está visualmente allí. ¿Alguna idea de cómo resolver eso?

Claro que podría crear una subclase de UIImageView e implementar touchesBegan: ... etc., pero no se siente realmente elegante. Quiero decir ... cuando quiero crear un hipervínculo de una imagen en la web, nunca querría crear mi propio elemento HTML para esa imagen, solo para conectarla a una url cuando se hace clic. Eso simplemente no tiene mucho sentido para mí.


Además de UIButtonTypeCustom, establezco los colores del texto del botón a lo siguiente:

[button setTitleColor:[UIColor clearColor] forState:UIControlStateNormal]; [button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal]; [button setTitleColor:[UIColor clearColor] forState:UIControlStateHighlighted]; [button setTitleShadowColor:[UIColor clearColor] forState:UIControlStateHighlighted];


Debería poder establecer el ''Tipo'' del botón en Personalizado en Interface Builder, y no mostrará ningún texto o elemento gráfico sobre UIImageView. De esta manera, no es necesario ajustar el alfa. Si la vista se construye desde el código, use:

button = [UIButton buttonWithType:UIButtonTypeCustom];


Es la única manera que encontré ...

[yourButton setImage:[UIImage imageNamed:@"AnEmptyButtonWithTheSameSize.png"] forState:UIControlStateNormal];

Cuida la imagen. Debe ser .png


Esto es lo que hice pero con el uso de una subclase de UIButton que luego descubrí que no debería ser subclasificado según la red. Mi subclase se llamaba Puntos

Points * mypoint = [Points buttonWithType: UIButtonTypeCustom];

luego, si tiene una imagen que desea agregar al botón: [mypoint setImage: imageNamed: @ "myimage"] forstate: UIControlStateNormal];

Si no agrega esta imagen, el botón será invisible para el usuario, pero deberá responder al toque. Así es como creé un punto de acceso en mi imageView para que respondiera a la interacción del usuario.


La mejor manera de hacer esto es:

myButton.hidden = YES;

No puede usar la propiedad buttonType porque es una propiedad de solo lectura. La única forma de usarlo es crear un botón dinámicamente.


La respuesta anterior de Jasons es casi correcta, pero no es posible configurar el tipo de botón. Entonces, para crear un botón vacío mediante programación, use este código:

UIButton* myButton = [UIButton buttonWithType:UIButtonTypeCustom]; myButton.frame=frame; [self.view addSubview:myButton];


Los botones UIB personalizados responden a las interacciones del usuario a menos que su alfa esté configurado en 0. Ponga un botón UIB personalizado en la parte superior de su imageView y conéctese a la acción presionada. También he establecido una imagen resaltada adicional para mi UIView, ahora realmente se comporta como un UIButton. Primero, he definido una duración para que UIView permanezca resaltado:

#define HIGHLIGHTED_DURATION 0.1

Luego, establezca la vista de imagen resaltada si se presiona el botón e inicie un temporizador para mantenerlo resaltado durante ese tiempo. No olvide configurar la imagen resaltada para su vista de imagen.

- (IBAction)buttonPressed:(id)sender { [_yourImageView setHighlighted:YES]; _timer = [NSTimer scheduledTimerWithTimeInterval:HIGHLIGHTED_DURATION target:self selector:@selector(removeHighlighted) userInfo:nil repeats:NO]; }

Y simplemente deshacer el resaltado cuando finalice el temporizador:

-(void) removeHighlighted{ _yourImageView.highlighted = NO; }


Me las arreglé para hacerlo usando el siguiente código. Si el iPad está en posición horizontal, el botón se ubicará en la esquina superior derecha de la pantalla.

UIButton *adminButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; adminButton.frame = CGRectMake(974.0f, 0.0f, 50.0f, 50.0f); [adminButton setBackgroundColor:[UIColor clearColor]]; [adminButton setTag:1]; [adminButton addTarget:self action:@selector(buttonPressed:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:adminButton];

Al presionar ''adminButton'' se ejecutará la siguiente función:

- (void)buttonPressed:(id)sender { int buttonId = ((UIButton *)sender).tag; switch(buttonId) { case 1: NSLog (@"Admin button was pressed"); break; case 2: //if there was a button with Tag 2 this will be called break; default: NSLog(@"Key pressed: %i", buttonId); break; } }


Puede ocultar un botón (o cualquier objeto) y mantenerlo activo agregando una máscara a su capa. El botón será invisible pero todavía capturará eventos.

let layer = CAShapeLayer() layer.frame = .zero myButton.layer.mask = layer


También creo que puedes asignar una imagen a un botón.

La imagen puede ocupar todo el fotograma y tampoco puede tener ningún otro artefacto de buttone si lo configura correctamente.

Echa un vistazo a la propiedad

UIButtonInstance.currentImage

De esa manera, no está acaparando sus recursos con elementos que esencialmente ya están allí.


lazyImageView = [[UIImageView alloc] init];

button=[[UIButton alloc]init]; [UIButton buttonWithType:UIButtonTypeRoundedRect]; [button addTarget:self action:@selector(aMethodForVideo:) forControlEvents:UIControlEventTouchUpInside]; [button setBackgroundImage:[UIImage imageNamed:@"BackTransparent.png"] forState:UIControlStateHighlighted]; [button setTitle:@"" forState:UIControlStateNormal]; lazyImageView.frame=CGRectMake(x, y, w, h); button.frame=CGRectMake(x, y, w, h);

El marco de ajuste del botón y la imagen tienen el mismo marco. Utilizo este código y funciona bien. También configura la imagen de fondo del botón para Estado: UIControlEstado Resaltado, de modo que cuando haga clic en eso cuando vea el efecto de clic.