color - menu ios
Cómo animar la transición de un estado a otro para UIControl/UIButton? (1)
Esta pregunta ya tiene una respuesta aquí:
- Desvanecimiento de un UIButton cuando se toca 1 respuesta
Tengo un UIButton que cambia la imagen en resaltado. Al pasar de UIControlStateHighlight a UIControlStateNormal, quiero que la imagen resaltada vuelva a fundirse lentamente en la imagen normal. ¿Hay una forma fácil de hacer esto?
Terminé subclasificando UIButton. Aquí está el código de archivo de implementación. Saqué algunas aplicaciones específicas, así que no he probado este código exacto, pero debería estar bien:
#import "SlowFadeButton.h"
@interface SlowFadeButton ()
@property(strong, nonatomic)UIImageView *glowOverlayImgView; // Used to overlay glowing animal image and fade out
@end
@implementation SlowFadeButton
-(id)initWithFrame:(CGRect)theFrame mainImg:(UIImage*)theMainImg highlightImg:(UIImage*)theHighlightImg
{
if((self = [SlowFadeButton buttonWithType:UIButtonTypeCustom])) {
self.frame = theFrame;
if(!theMainImg) {
NSLog(@"Problem loading the main image/n");
}
else if(!theHighlightImg) {
NSLog(@"Problem loading the highlight image/n");
}
[self setImage:theMainImg forState:UIControlStateNormal];
self.glowOverlayImgView = [[UIImageView alloc] initWithImage:theHighlightImg];
self.glowOverlayImgView.frame = self.imageView.frame;
self.glowOverlayImgView.bounds = self.imageView.bounds;
self.adjustsImageWhenHighlighted = NO;
}
return self;
}
-(void)setHighlighted:(BOOL)highlighted
{
// Check if button is going from not highlighted to highlighted
if(![self isHighlighted] && highlighted) {
self.glowOverlayImgView.alpha = 1;
[self addSubview:self.glowOverlayImgView];
}
// Check if button is going from highlighted to not highlighted
else if([self isHighlighted] && !highlighted) {
[UIView animateWithDuration:1.0f
animations:^{
self.glowOverlayImgView.alpha = 0;
}
completion:NULL];
}
[super setHighlighted:highlighted];
}
-(void)setGlowOverlayImgView:(UIImageView *)glowOverlayImgView
{
if(glowOverlayImgView != _glowOverlayImgView) {
_glowOverlayImgView = glowOverlayImgView;
}
self.glowOverlayImgView.alpha = 0;
}
@end
También podría simplemente extraer la imagen resaltada de [self imageForState:UIControlStateHighlighted]
y usar eso, debería funcionar igual. Lo principal es asegurarse de que adjustsImageWhenHighlighted = NO
, y luego setHighlighted:
método setHighlighted:
.