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

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

【问题讨论】:

    标签: ios uibutton uicontrol


    【解决方案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:方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 2012-04-10
      • 1970-01-01
      相关资源
      最近更新 更多