如何为UIControl / UIButton从一个状态转换到另一个状态?

我有一个UIButton,突出显示更改图像。 当从UIControlStateHighlight转换到UIControlStateNormal时,我想让突出显示的图像慢慢淡入正常图像。 是否有捷径可寻?

我结束了inheritanceUIButton。 这是实现文件代码。 我拿了一些应用程序特定的东西,所以我没有testing这个确切的代码,但它应该没事的:

#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 

你也可以从[self imageForState:UIControlStateHighlighted]拉出高亮显示的图像,并使用它,它应该是一样的。 主要的事情是确保adjustsImageWhenHighlighted = NO ,然后重写setHighlighted:方法。