type guidelines change apple iphone uiimageview uibutton highlighting uicontrol

iphone - guidelines - Resaltando una subclase de UIControl



uicontrol state swift (3)

Con el fin de mantener esta respuesta actualizada, aquí está la versión Swift (de la respuesta de Costique).

override var isHighlighted: Bool { didSet { alpha = self.isHighlighted ? 0.6 : 1.0 // Sets alpha to 0.6 if highlighted, or 1.0 if it''s not. } }

Es posible que también desee atenuar la atenuación de la UIControl. Para hacer esto, simplemente coloque la asignación alfa en un bloque de animación, como este

override var isHighlighted: Bool { didSet { UIView.animate(withDuration: 0.25) { self.alpha = self.isHighlighted ? 0.6 : 1.0 } } }


Básicamente necesito un botón de imagen, específicamente un objeto personalizado que:
1) llama a la acción de un controlador cuando se toca
2) encapsula datos personalizados
3) se mueve automáticamente por vista de envoltura (no relevante)

Bueno, obtuve todo esto con una subclase de UIControl (ya que no se recomienda la subclase de UIImageView y la subclase de UIImageView dificulta la gestión del punto 1). Pero ahora ¿cuál es la forma correcta de resaltarlo? Me gustaría resaltar el control cuando se pulsa de alguna manera (incluso una simple reducción momentánea de alfa).

Con beginTrackingWithTouch y endTrackingWithTouch no puedo reconocer el único evento UIControlEventTouchUpInside .

¿Una animación de vista en el controlador? Me parece una solución aproximada.

¿Existe una solución simple e inmediata?

Gracias :(


Creo que UIControls establece automáticamente su propiedad resaltada correctamente, basándose únicamente en eventos táctiles. Lo que necesita es anular el método -setHighlighted: para implementar un algoritmo específico:

- (void) setHighlighted: (BOOL) highlighted { [super setHighlighted: highlighted]; // Only as an example. Caution: looks like a disabled control self.alpha = highlighted ? 0.5f : 1.0f; }


Para resaltar las subvistas de UIControl correctamente, puede usar un color de tinte personalizado. Para habilitar esto, en algún lugar de los métodos de init o awakeFromNib debe cambiar el modo de representación de la imagen a always template :

self.imageView.image = [self.imageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; self.backgroundImageView.image = [self.backgroundImageView.image imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; self.tintColor = [UIColor zst_blueColor]; // Use custom instead of system-defined color

Entonces, en lugar de cambiar el valor alpha , podemos cambiar el color del tinte y cambiará sus UIImageView UIImageView automáticamente. En el método setHighlighted: puede cambiar el texto y el color del tinte a un color más oscuro:

- (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; UIColor *tintColor = highlighted ? [UIColor zst_darkerBlueColor] : [UIColor zst_blueColor]; self.tintColor = tintColor; self.titleLabel.textColor = tintColor; }