说到IOS直播平台开发队列的话就想到了多线程,NSOperation ,我们可以重写它,然后在 start 方法中添加动画,但是注意我们只是需要让这些消息排队,更新 UI 还是要在主线程操作;我们还要手动触发 NSOperation 的 KVO,告诉这个操作什么时候开始,什么时候算是结束,我们想在一个动画播放完毕后再执行下一个动画,于是我这里定义了一个 block ,在动画结束时,传递给 NSOperation ,告诉它动画结束了。
1、IOS直播平台开发初始化
-(instancetype)init{
self = [super init];
if (self) {义一个BOOL值来表示当前是否已完成
_isUserMove = 0;中元素的数组
_userLogin = [NSMutableArray array];
return self;
2、忘队列中添加元素,我IOS直播平台开发这添加的是字典
-(void)addUserMove:(NSDictionary *)msg{
if (msg) { //如果有值添加到队列数组中
[_userLogin addObject:msg];
if(_isUserMove == 0){ //如果没有队列在运行,就直接运行
[self userLoginOne]; }
3、判断在IOS直播平台开发队列数组中的元素是否为空
-(void)userLoginOne{为空就不走队列动画了
if (_userLogin.count == 0 || _userLogin == nil) {
return;组中的第一个元素,去进行动画
NSDictionary *Dic = [_userLogin firstObject];删除这个开始运行的元
[_userLogin removeObjectAtIndex:0];画
[self userPlar:Dic];
4、在IOS直播平台开发动画的实现
-(void)userPlar:(NSDictionary *)dic{
//具体实现省略了 我这使用的是dispatch_after 也可以用[self performSelector:@selector(jieshu) withObject:nil afterDelay:3.5]BOOL为1
_isUserMove = 1;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^画结束 设置BOOL值
_isUserMove = 0;
if (_userLogin.count >0) {
[self addUserMove:nil];
首先考虑的是,在IOS直播平台开发收到礼物消息的回调时去赋值数据源,运行动画,但是这个回调是是一个字典数组,里面包含了一段时间内多条消息,他们是有顺序的,这是其一;其二,这个回调调用次数会很频繁,短时间内就会收到更多的消息数组。所以需要把这些消息处理成队列,然后播放动画效果,一个动画效果播放完成后,再从消息队列中取下一个消息,继续播放下一个动画,这样才能在IOS直播平台开发时保证动画的播放顺序不回乱。}