美文网首页
iOS NSOperationQueue实现动画队列,有结果的G

iOS NSOperationQueue实现动画队列,有结果的G

作者: 心在前方 | 来源:发表于2020-01-13 16:55 被阅读0次
    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实现动画队列,有结果的G

          本文链接:https://www.haomeiwen.com/subject/qfhnactx.html