如何从动画一个状态到另一个UIControl / UIButton的过渡? [重复](How t

2019-07-21 01:44发布

这个问题已经在这里有一个答案:

  • 当触及淡出一个的UIButton 1个回答

我有一个亮点上改变图像的UIButton。 当从UIControlStateHighlight过渡到UIControlStateNormal,我想强调图像慢慢褪去回到正常图像。 是否有捷径可寻?

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



文章来源: How to animate transition from one state to another for UIControl/UIButton? [duplicate]