2013-03-06 86 views

回答

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:方法。

相关问题