titlelabel color buttons ios uibutton uicontrol

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í:

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: .