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

时间:2013-03-06 02:36:12

标签: ios uibutton uicontrol

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

1 个答案:

答案 0 :(得分:1)

我最终继承了UIButton的子类。这是实现文件代码。我拿了一些特定于应用程序的东西,所以我没有测试过这个确切的代码,但它应该没问题:

#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:方法。