titlelabel guidelines color buttons iphone objective-c uibutton

iphone - guidelines - Animar cambio de estado de UIButton



menu ios (5)

Aquí hay una solución autónoma que también admite una bandera animated booleana.

- (void)setEnabled:(BOOL)enabled animated:(BOOL)animated { if (_button.enabled == enabled) { return; } void (^transitionBlock)(void) = ^void(void) { _button.enabled = enabled; }; if (animated) { [UIView transitionWithView:_button duration:0.15 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ transitionBlock(); } completion:nil]; } else { transitionBlock(); } }

Estoy usando un UIButton con imágenes para estados normales y resaltados. Funcionan como se esperaba, pero quiero tener una transición de desvanecimiento / fusión y no solo un intercambio repentino.

¿Cómo puedo hacer eso?


Para lograr eso extendí UIButton. agregó una nueva propiedad llamada hilightedImage con el siguiente código:

- (void)setHilightImage:(UIImageView *)_hilightImage { if (hilightImage != _hilightImage) { [hilightImage release]; hilightImage = [_hilightImage retain]; } [hilightImage setAlpha:0]; [self addSubview:hilightImage]; } - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.14]; if(hilightImage){ [hilightImage setAlpha:1]; } [UIView commitAnimations]; [super touchesBegan:touches withEvent:event]; } - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { self.highlighted = FALSE; [UIView beginAnimations:nil context:NULL]; [UIView setAnimationDuration:0.14]; if(hilightImage){ [hilightImage setAlpha:0]; } [UIView commitAnimations]; [super touchesEnded:touches withEvent:event]; }


UIButton hereda de UIView

Entonces, obtienes su punto de vista y llamas beginAnimations:context:

Luego, todos los métodos apropiados de establecimiento de animación a partir de ahí.

Las siguientes propiedades de la clase UIView son animables:

  • @property frame
  • @property bounds
  • @ centro de propiedad
  • @property transform
  • @property alpha
  • @property backgroundColor
  • @property contentStretch

Ref .: UIView Class Reference


@ marián-Černý responde en Swift :

UIView.transitionWithView(button, duration: 4.0, options: .TransitionCrossDissolve, animations: { button.highlighted = true }, completion: nil)


Esto se puede hacer usando la animación de transición de un UIView. No importa que la propiedad isHighlighted no sea animable, ya que transiciona toda la vista.

Swift 3

UIView.transition(with: button, duration: 4.0, options: .transitionCrossDissolve, animations: { button.isHighlighted = true }, completion: nil)

C objetivo

[UIView transitionWithView:button duration:4.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ button.highlighted = YES; } completion:nil];