iOS NSOperationQueue实现动画队列,有结果的GIF正确展示

image.png

需求如图,当在麦位的用户发送有结果的GIF表情时,要在麦位上展示当前的GIF效果。GIF动态执行3秒后,展示一张结果PNG保留1秒。

问题:当用户在第一个GIF还没有展示完毕的情况下发送了第二个GIF,会导致第一个GIF展示不完,并且第一个GIF的延时函数会导致显示错乱。

关于NSOperation的相关介绍这里不再赘述, 懒人推荐:点击这里~iOS基础深入补完计划--NSOperation

@interface xxx()
@property (nonatomic, strong) NSOperationQueue *opQueue;
@end

@implementation xxx

......

- (void)show{
  NSBlockOperation *op = [NSBlockOperation blockOperationWithBlock:^{
    //show gif
    ...
    //阻止当前线程3秒,来执行GIF的动画效果
    [NSThread sleepForTimeInterval:3.0];
    //show png
    ...
    //阻止当前线程1秒,来展示结果PNG图片
    [NSThread sleepForTimeInterval:1.0];
    //这里阻止的线程是NSOperation管理的子线程,可以放心阻塞不会影响其他
  }];
  [self.opQueue addOperation:op];
}
- (NSOperationQueue *)opQueue{
    if (!_opQueue) {
        _opQueue = [[NSOperationQueue alloc]init];
        //设置为串行效果,按顺序执行
        _opQueue.maxConcurrentOperationCount = 1;
    }
    return _opQueue;
}
@end

至此,就实现了GIF效果队列展示,并且每个GIF显示3秒,结果停留1秒。

在这个项目中,用到的地方非常多,比如礼物的连击展示效果,产品需要礼物的连击数量必须是连贯的,有时候用户点击太快,可能出现X1后就直接是X4,也可以使用队列来解决这个问题。

大家还有什么好的分享欢迎在评论中讨论。

你可能感兴趣的:(iOS NSOperationQueue实现动画队列,有结果的GIF正确展示)