要想實現(xiàn)直播間的贈送禮物的功能,首先需要理解贈送禮物的機制洞翩;
實際上贈送禮物也是向聊天室里邊的所有人發(fā)送一條消息讲弄,當然這條消息是你提前定義好的一個禮物消息類如下:
@interface GiftMessage : RCMessageContent
/*
* 類型 type可以設置為: ? 0 玫瑰,1赴肚,心 2,棒棒糖 ?等等
*/
@property(nonatomic, copy) NSString *type;
當你要發(fā)送那類禮物的時間就是向聊天室內(nèi)的所有人發(fā)送了這樣一條消息二蓝,在接受消息的方法中需要判斷消息類型誉券,如果是禮物類則判斷禮物類型,然后選擇相應的禮物圖片做我們想要的動畫效果:
- (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]];//調(diào)用禮物動畫方法
}
}
要注意的是刊愚,當用戶不停的發(fā)送的禮物的時間踊跟,動畫有可能會重疊,所以采用了gcd中的異步串行隊列來解決這個問題鸥诽,首先實例化一個dispatch_queue_t serialQueue;
serialQueue = dispatch_queue_create("serial", DISPATCH_QUEUE_SERIAL);
當收到禮物消息的時間將消息添加到隊列中:
dispatch_block_t taskBlock = ^{
// 延遲的意圖在于演示多任務在串行隊列中依次執(zhí)行(FIFO原則)
[NSThread sleepForTimeInterval:5];
NSLog(@"Task1-->%@",[NSThread currentThread]);
dispatch_async(dispatch_get_main_queue(), ^{
//可以將動畫方法放在此處商玫,每5秒執(zhí)行一次動畫,可以避免動畫重疊問題
});
};
dispatch_async(serialQueue, taskBlock);