动画 UIButton 背景图像

Posted

技术标签:

【中文标题】动画 UIButton 背景图像【英文标题】:Animating UIButton background image 【发布时间】:2012-01-15 20:11:42 【问题描述】:

有没有办法用一组图像为 UIButton 背景图像视图设置动画?

我已经设法使用 imageView 属性来做到这一点,但找不到等效的背景属性。

10 倍

【问题讨论】:

【参考方案1】:

这是我所做的(在 UIButton 子类中):

设置按钮图片,如常规:

[self setBackgroundImage:[[UIImage imageNamed:@"button"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)] forState:UIControlStateNormal];
[self setBackgroundImage:[[UIImage imageNamed:@"button_pressed"] resizableImageWithCapInsets:UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0)] forState:UIControlStateHighlighted];

覆盖突出显示:

- (void)setHighlighted:(BOOL)highlighted 
     [UIView transitionWithView:self duration:0.25 options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionAllowAnimatedContent animations:^
         [super setHighlighted:highlighted];
      completion:nil]; 

【讨论】:

这是一个绝妙的解决方案【参考方案2】:

要更改按钮背景图像或文本 - 您需要为特定的 UIControlState 更改它...即突出显示、选定、禁用

使用

- (void)setBackgroundImage:(UIImage *)image forState:(UIControlState)state

我不确定你是否可以为它们制作动画,我从未尝试过。如果你不能为它们设置动画,那么你可以将 UIImageView 放在一个透明按钮后面,然后为其中的图像设置动画 - 只是一个想法。

【讨论】:

我在透明按钮后面放了一个 UIImageView。有点 hacky,但我能说什么 - 那行得通! 10x【参考方案3】:

您可以像这样为UIImageView 设置动画的方式为UIButton 设置动画...

-(void) addAnimationToButton:(UIButton*) button
    UIImageView* animationView = [button imageView];
    NSArray* animations=[NSArray arrayWithObjects:
                         [UIImage imageNamed:@"sprite1.png"],
                         [UIImage imageNamed:@"sprite2.png"],
                         [UIImage imageNamed:@"sprite2.png"],
                         //and so on if you need more
                         nil];
    CGFloat animationDuration = 2.0;
    [animationView setAnimationImages:animations];
    [animationView setAnimationDuration:animationDuration];
    [animationView setAnimationRepeatCount:0]; //0 is infinite

你可以这样使用它:

[self addAnimationToButton:yourButton];
[[yourButton imageView] startAnimating]; //or stopAnimating

【讨论】:

【参考方案4】:

是的,这是可能的。使用 NSTimer ,

NSTimer *myTimer = [NSTimer scheduledTimerWithTimeInterval:5.00 target:self 选择器:@selector(changeImage) userInfo:nil repeats:YES];

那么,方法如下,

- (void)changeImage
 

           static int counter = 0;

           if([bannerArray count] == counter)
            
                   counter = 0;
            
            [button setImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:bannerArray[counter]]]] forState:UIControlStateNormal];

          counter++;

它对我有用。但是添加像翻转等动画需要弄清楚。希望这也是满足您需求的一种方式。

【讨论】:

以上是关于动画 UIButton 背景图像的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 系统样式选中状态,保留图片和背景

iOS7 UIButton图像闪烁

重复 UIButton 动画并更改背景

全景背景图像淡入动画问题?

使用 Swift 3 为 iOS 中的 UIButton 设置“背景颜色”动画

NavigationController 推送扭曲背景图像