由于项目需要,需要给一个UIButton的imageView添加动画,就是一个连续的播放帧,我们知道imageView有个属性animationImages可以用来添加动画,本来我的动画执行的好好地,但是奇怪的是每次执行完之后,总是有一个灰灰的tintcolor在UIButton上面,那个颜色就像是UIButton在(highlighted)或者是(selected)状态下出现的颜色一样。
这是我原来的代码
UIImageView * imageView = button.imageView;
//设置动画帧
imageView.animationImages=[NSArray arrayWithObjects:
[UIImage imageNamed:@"nimationImage1"],
[UIImage imageNamed:@"nimationImage2"],
[UIImage imageNamed:@"nimationImage3"],
[UIImage imageNamed:@"nimationImage4"],
[UIImage imageNamed:@"nimationImage5"],
[UIImage imageNamed:@"nimationImage6"],
nil ];
//设置动画总时间
imageView.animationDuration=1.0;
//设置重复次数,0表示无限
imageView.animationRepeatCount = 5;
//开始动画
if (! imageView.isAnimating) {
[imageView startAnimating];
}
找了很久的资料,也米有找到原因,后来没办法就去查看UIButton的文档,发现UIButton有个adjustsImageWhenHighlighted属性,这个属性表示当UIbutton设置了背景图片(imageView)时,并且没有设置高粱状态下的背景图片,点击按钮是否显示有高粱状态,默认是YES。也就是说当我们点击按钮的时候会有高亮状态,当我们设置button.adjustsImageWhenHighlighted = NO时,再点击就看不到高亮状态了。
恩,感觉这个属性靠谱一些,既然默认是YES,那咱就把属性改为NO试一下吧,死马当活马医嘛,后来试了一下,还真的可以,在点击开始动画的时候把UIButton的adjustsImageWhenHighlighted属性设置为NO,并且在动画结束的时候调用stop,完美得解决了问题。
附上新代码:
[button setAdjustsImageWhenHighlighted:NO];
UIImageView * imageView = button.imageView;
//设置动画帧
imageView.animationImages=[NSArray arrayWithObjects:
[UIImage imageNamed:@"nimationImage1"],
[UIImage imageNamed:@"nimationImage2"],
[UIImage imageNamed:@"nimationImage3"],
[UIImage imageNamed:@"nimationImage4"],
[UIImage imageNamed:@"nimationImage5"],
[UIImage imageNamed:@"nimationImage6"],
nil ];
//设置动画总时间
imageView.animationDuration=1.0;
//设置重复次数,0表示无限
imageView.animationRepeatCount = 5;
//开始动画
if (! imageView.isAnimating) {
[imageView startAnimating];
}
[self performSelector:@selector(stopButtonAnimation) withObject:nil afterDelay:5.0];
- (void)stopButtonAnimation{
if ([button.imageView isAnimating]) {
[button.imageView stopAnimating];
}
}