如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡? [复制]

Posted

技术标签:

【中文标题】如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡? [复制]【英文标题】:How to animate transition from one state to another for UIControl/UIButton? [duplicate] 【发布时间】:2013-03-06 02:36:11 【问题描述】:

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

【问题讨论】:

【参考方案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:方法。

【讨论】:

以上是关于如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何为 CAShapeLayer 路径和填充颜色设置动画

如何为剪切路径设置动画

如何为 UITableViewCell 设置动画

如何为所有精灵图像设置动画?

如何为 MKAnnotationView 放置动画?

如何为 CAGradientLayer 色点设置动画?