问题背景
在UIButton上播放gif动画。GIF可以正常播放,但是当点击按钮时,动图总是从头播。
代码
/// 生成GIF图片
- (UIImage *)generateGIFImage {
NSMutableArray *images = [[NSMutableArray alloc] init];
for(inti =1; i <= 4; ++i) {
UIImage*image = [UIImageimageNamed:[NSStringstringWithFormat:@"%d.jpeg",i]];
[images addObject:image];
}
UIImage *animatedImage = [UIImageanimatedImageWithImages:imagesduration:0.5];
returnanimatedImage;
}
- (void)updateCell {
UIImage *gif = [self generateGIFImage];
UIButton *btn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, UIScreen.mainScreen.bounds.size.width, 100)];
[btn setImage:gif forState:UIControlStateNormal];
[self.contentView addSubview:btn];
}
问题分析
当点击UIButton时,按钮的状态会发生改变,从默认状态变为高亮状态,这会导致UIButton重新配置其imageView,从而导致GIF重新播放。
解决方案
将播放GIF的UIImageView绘制在UIButton上,而不是用UIButton的imageVIew来播放GIF。 同时将这个UIImageView的userInteractionEnabled 设置为TRUE,避免按钮点击失灵。