ios - titel - title tag länge 2018



Wie man den Übergang von einem Zustand zum anderen für UIControl/UIButton animiert? (1)

Diese Frage hat hier bereits eine Antwort:

Ich habe eine UIButton, die Bild bei Hervorhebung ändert. Beim Übergang von UIControlStateHighlight zu UIControlStateNormal möchte ich, dass das markierte Bild langsam wieder in das normale Bild zurückkehrt. Gibt es einen einfachen Weg, dies zu tun?


Ich habe UIButton abgeleitet. Hier ist der Implementierungsdateicode. Ich habe ein paar App-spezifische Sachen herausgenommen, also habe ich diesen genauen Code nicht getestet, aber es sollte in Ordnung sein:

#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

Sie könnten auch das hervorgehobene Bild aus [self imageForState:UIControlStateHighlighted] und das verwenden, es sollte genauso funktionieren. Die wichtigsten Dinge sind, um sicherzustellen, adjustsImageWhenHighlighted = NO , und überschreiben dann die setHighlighted: -Methode.





uicontrol