动画从一种状态到另一种状态的过渡

动画从一种状态到另一种状态的过渡

本文介绍了如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a UIButton that changes image on highlight. When transitioning from UIControlStateHighlight to UIControlStateNormal, I want the highlighted image to slowly fade back into the normal image. Is there an easy way to do this?

推荐答案

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

I ended up subclassing UIButton. Here's the implementation file code. I took some app-specific stuff out, so I haven't tested this exact code, but it should be fine:

#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
");
        }
        else if(!theHighlightImg) {
            NSLog(@"Problem loading the highlight image
");
        }

        [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:方法.

You could also just pull the highlighted image from [self imageForState:UIControlStateHighlighted] and use that, it should work the same. The main things are to make sure adjustsImageWhenHighlighted = NO, and then overriding the setHighlighted: method.

这篇关于如何为 UIControl/UIButton 动画从一种状态到另一种状态的过渡?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 05:09