1

ハイライト時に画像を変更するUIButtonがあります。UIControlStateHighlightからUIControlStateNormalに移行するときに、強調表示された画像をゆっくりと通常の画像にフェードバックさせたいです。これを行う簡単な方法はありますか?

4

1 に答える 1

2

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:ことです。

于 2013-03-07T00:05:25.333 に答える