要想实现直播间的赠送礼物的功能,首先需要理解赠送礼物的机制;
实际上赠送礼物也是向聊天室里边的所有人发送一条消息,当然这条消息是你提前定义好的一个礼物消息类如下:
@interface GiftMessage : RCMessageContent
/*
* 类型 type可以设置为: 0 玫瑰,1,心 2,棒棒糖 等等
*/
@property(nonatomic, copy) NSString *type;
当你要发送那类礼物的时间就是向聊天室内的所有人发送了这样一条消息,在接受消息的方法中需要判断消息类型,如果是礼物类则判断礼物类型,然后选择相应的礼物图片做我们想要的动画效果:
- (void)didReceiveMessageNotification:(NSNotification *)notification {
__block RCMessage *rcMessage = notification.object;
MessageModel *model = [[MessageModel alloc] initWithMessage:message];
if ([model.content isMemberOfClass:[GiftMessage class]])
{
GiftMessage *message2 = (RCGiftMessage *)model.content;
// 任务
[self creatGiftAnimation:[_imgNameArray objectAtIndex:message2.type.intValue] CountOfImg:[_countOfImgArray objectAtIndex:message2.type.intValue] sendGiftUser:message2 giftName:[_giftNameArray objectAtIndex:message2.type.intValue]];//调用礼物动画方法
}
}
要注意的是,当用户不停的发送的礼物的时间,动画有可能会重叠,所以采用了gcd中的异步串行队列来解决这个问题,首先实例化一个dispatch_queue_t serialQueue;
serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);
当收到礼物消息的时间将消息添加到队列中:
dispatch_block_t taskBlock = ^{
// 延迟的意图在于演示多任务在串行队列中依次执行(FIFO原则)
[NSThread sleepForTimeInterval:5];
NSLog(@"Task1-->%@",[NSThread currentThread]);
dispatch_async(dispatch_get_main_queue(), ^{
//可以将动画方法放在此处,每5秒执行一次动画,可以避免动画重叠问题
});
};
dispatch_async(serialQueue, taskBlock);
网友评论