YOUPAILZChatRoomSeatAvatarView.m 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. //
  2. // YOUPAILZChatRoomSeatAvatarView.m
  3. // VQU
  4. //
  5. // Created by CY on 2021/10/28.
  6. // Copyright © 2021 MS. All rights reserved.
  7. //
  8. #import "YOUPAILZChatRoomSeatAvatarView.h"
  9. #import "SDWebImageCoderHelper.h"
  10. @interface YOUPAILZChatRoomSeatAvatarView () <CAAnimationDelegate>
  11. @end
  12. @implementation YOUPAILZChatRoomSeatAvatarView
  13. - (instancetype)initWithFrame:(CGRect)frame{
  14. if (self = [super initWithFrame:frame]) {
  15. [self youpaifinitUI];
  16. }
  17. return self;
  18. }
  19. - (void)youpaifinitUI{
  20. YOUPAILZAvatarView *youpaipavatarView = [YOUPAILZAvatarView youpaifavatarViewWithFrame:CGRectMake(0.0f, 0.0f, self.mj_w, self.mj_h) avatarURL:nil personalityBoxURL:nil];
  21. youpaipavatarView.hidden = YES;
  22. [self addSubview:youpaipavatarView];
  23. self.youpaipavatarView = youpaipavatarView;
  24. [youpaipavatarView mas_makeConstraints:^(MASConstraintMaker *make) {
  25. make.centerX.equalTo(self);
  26. make.top.mas_offset(0);
  27. make.size.mas_offset(self.mj_size);
  28. }];
  29. LOTAnimationView *youpaiptalkingAnimationView = [LOTAnimationView animationWithFilePath:[[NSBundle mainBundle] pathForResource:@"ic_chatroom_seat_animation_new" ofType:@"json"]];
  30. youpaiptalkingAnimationView.frame = CGRectMake(0.0f, 0.0f, self.mj_w * 1.8f, self.mj_h * 1.8f);
  31. youpaiptalkingAnimationView.loopAnimation = YES;
  32. youpaiptalkingAnimationView.contentMode = UIViewContentModeScaleAspectFill;
  33. [youpaiptalkingAnimationView play];
  34. [self addSubview:youpaiptalkingAnimationView];
  35. self.youpaiptalkingAnimationView = youpaiptalkingAnimationView;
  36. [youpaiptalkingAnimationView mas_makeConstraints:^(MASConstraintMaker *make) {
  37. make.center.equalTo(youpaipavatarView);
  38. make.size.mas_offset(CGSizeMake(self.mj_w * 1.8f, self.mj_h * 1.8f));
  39. }];
  40. [self sendSubviewToBack:youpaiptalkingAnimationView];
  41. UIImageView *youpaipdisableSendMessageImgV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"vqu_images_chatroom_seat_disable_send_message"]];
  42. youpaipdisableSendMessageImgV.hidden = YES;
  43. [self addSubview:youpaipdisableSendMessageImgV];
  44. self.youpaipdisableSendMessageImgV = youpaipdisableSendMessageImgV;
  45. [youpaipdisableSendMessageImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  46. make.right.equalTo(youpaipavatarView.mas_right);
  47. make.bottom.equalTo(youpaipavatarView.mas_bottom);
  48. make.size.mas_offset(CGSizeMake(16.0f, 16.0f));
  49. }];
  50. UIImageView *youpaipunmannedStateImgV = [[UIImageView alloc] init];
  51. youpaipunmannedStateImgV.hidden = YES;
  52. [self addSubview:youpaipunmannedStateImgV];
  53. self.youpaipunmannedStateImgV = youpaipunmannedStateImgV;
  54. [youpaipunmannedStateImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  55. make.centerX.equalTo(self);
  56. make.top.mas_offset(0);
  57. make.size.mas_offset(self.mj_size);
  58. }];
  59. UIImageView *youpaipemojiImgV = [[UIImageView alloc] init];
  60. youpaipemojiImgV.contentMode = UIViewContentModeScaleAspectFit;
  61. youpaipemojiImgV.hidden = YES;
  62. [self addSubview:youpaipemojiImgV];
  63. self.youpaipemojiImgV = youpaipemojiImgV;
  64. [youpaipemojiImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  65. make.center.equalTo(youpaipavatarView);
  66. make.size.mas_offset(self.mj_size);
  67. }];
  68. UIImageView *youpaiphatImgV = [[UIImageView alloc] init];
  69. youpaiphatImgV.hidden = YES;
  70. [self addSubview:youpaiphatImgV];
  71. self.youpaiphatImgV = youpaiphatImgV;
  72. [youpaiphatImgV mas_makeConstraints:^(MASConstraintMaker *make) {
  73. make.top.equalTo(youpaipavatarView.mas_top).offset(-17.0f);
  74. make.centerX.equalTo(youpaipavatarView);
  75. make.size.mas_offset(CGSizeMake(45.0f, 45.0f));
  76. }];
  77. }
  78. -(void)setYoupaipmodel:(YOUPAILZChatRoomSeatModel *)youpaipmodel{
  79. self.youpaipavatarView.hidden = YES;
  80. self.youpaiptalkingAnimationView.hidden = YES;
  81. self.youpaipdisableSendMessageImgV.hidden = YES;
  82. self.youpaipunmannedStateImgV.hidden = YES;
  83. switch (youpaipmodel.youpaipseatState) {
  84. case LZChatRoomSeatStateWithFree:{
  85. self.youpaipunmannedStateImgV.hidden = NO;
  86. switch (youpaipmodel.youpaipseatType) {
  87. case LZChatRoomSeatTypeWithOrdinary:{
  88. if (youpaipmodel.youpaipplayType == 2) {
  89. NSString *imageName = @"";
  90. if (youpaipmodel.youpaipseatIndex <= 4) {
  91. imageName = @"vqu_image_chatroom_seat_woman";
  92. if (youpaipmodel.youpaipisSelected) {
  93. imageName = [NSString stringWithFormat:@"%@_sel",imageName];
  94. }
  95. }else{
  96. imageName = @"vqu_image_chatroom_seat_man";
  97. if (youpaipmodel.youpaipisSelected) {
  98. imageName = [NSString stringWithFormat:@"%@_sel",imageName];
  99. }
  100. }
  101. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName];
  102. }else{
  103. NSString *imageName = @"vqu_images_chatroom_seat_ordinary";
  104. if (youpaipmodel.youpaipisSelected) {
  105. imageName = [NSString stringWithFormat:@"%@_sel",imageName];
  106. }
  107. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName];
  108. }
  109. }
  110. break;
  111. case LZChatRoomSeatTypeWithGuest:{
  112. if (youpaipmodel.youpaipplayType == 2) {
  113. NSString *imageName = @"vqu_image_chatroom_seat_man";
  114. if (youpaipmodel.youpaipisSelected) {
  115. imageName = [NSString stringWithFormat:@"%@_sel",imageName];
  116. }
  117. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName];
  118. }else{
  119. NSString *imageName = @"vqu_images_chatroom_seat_guest";
  120. if (youpaipmodel.youpaipisSelected) {
  121. imageName = [NSString stringWithFormat:@"%@_sel",imageName];
  122. }
  123. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName];
  124. }
  125. }
  126. break;
  127. case LZChatRoomSeatTypeWithHost:
  128. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:@"vqu_images_chatroom_seat_host"];
  129. break;
  130. default:
  131. break;
  132. }
  133. }
  134. break;
  135. case LZChatRoomSeatStateWithLock:{
  136. self.youpaipunmannedStateImgV.hidden = NO;
  137. self.youpaipunmannedStateImgV.image = [UIImage imageNamed:@"vqu_images_chatroom_seat_lock"];
  138. }
  139. break;
  140. case LZChatRoomSeatStateWithBusy:{
  141. self.youpaipunmannedStateImgV.hidden = YES;
  142. self.youpaipavatarView.hidden = NO;
  143. self.youpaipavatarView.youpaipavatarURL = [LCTools getImageUrlWithAddress:youpaipmodel.youpaipuserInfo.youpaipavatar];
  144. self.youpaipavatarView.youpaippersonalityBoxURL = [LCTools getImageUrlWithAddress:youpaipmodel.youpaipuserInfo.youpaipavatar_frame];
  145. // NSLog(@"%@ -- %@",youpaipmodel.youpaipuserInfo.youpaipnickname,self.youpaipavatarView.youpaipavatarURL.absoluteString);
  146. }
  147. default:
  148. break;
  149. }
  150. if (youpaipmodel.youpaipisTalking) {
  151. self.youpaiptalkingAnimationView.hidden = NO;
  152. }
  153. if (youpaipmodel.youpaipisDisableMicrophone) {
  154. self.youpaipdisableSendMessageImgV.hidden = NO;
  155. }
  156. if (youpaipmodel.youpaipisEmoji) {
  157. self.youpaipemojiImgV.hidden = NO;
  158. if (![youpaipmodel.youpaipemojiImg isEqual:_youpaipmodel.youpaipemojiImg]) {
  159. self.youpaipemojiImgV.image = nil;
  160. [self.youpaipemojiImgV.layer removeAllAnimations];
  161. @weakify(self);
  162. [[SDWebImageDownloader sharedDownloader] downloadImageWithURL:[LCTools getImageUrlWithAddress:youpaipmodel.youpaipemojiImg] options:SDWebImageDownloaderUseNSURLCache progress:^(NSInteger receivedSize, NSInteger expectedSize, NSURL * _Nullable targetURL) {} completed:^(UIImage * _Nullable image, NSData * _Nullable data, NSError * _Nullable error, BOOL finished) {
  163. @strongify(self);
  164. if(image != nil){
  165. NSArray<SDWebImageFrame *> *imageFrames = [SDWebImageCoderHelper framesFromAnimatedImage:image];
  166. NSTimeInterval totalDuration = 0.0;
  167. NSMutableArray *images = [NSMutableArray array];
  168. for (SDWebImageFrame *imageFrame in imageFrames) {
  169. totalDuration += imageFrame.duration;
  170. [images addObject:imageFrame.image];
  171. }
  172. // UIImageView 关键帧动画
  173. CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"];
  174. // 动画结束之后的回调
  175. animation.delegate = self;
  176. animation.duration = totalDuration;
  177. animation.repeatCount = 1;
  178. // 设置animation的唯一标示,这样在delegate回调的时候能够区分开来
  179. [animation setValue:@"animation1" forKey:@"customType"];
  180. animation.values = images;
  181. self.youpaipemojiImgV.image = image;
  182. [self.youpaipemojiImgV.layer addAnimation:animation forKey:@""];
  183. }
  184. }];
  185. }
  186. }else{
  187. [self.youpaipemojiImgV.layer removeAllAnimations];
  188. self.youpaipemojiImgV.hidden = YES;
  189. self.youpaipemojiImgV.image = nil;
  190. }
  191. if (youpaipmodel.youpaiphat_url.length != 0) {
  192. self.youpaiphatImgV.hidden = NO;
  193. self.youpaiphatImgV.image = nil;
  194. [self.youpaiphatImgV sd_setImageWithURL:[LCTools getImageUrlWithAddress:youpaipmodel.youpaiphat_url]];
  195. if (youpaipmodel.youpaipseatIndex <= 4) {
  196. [self.youpaiphatImgV mas_remakeConstraints:^(MASConstraintMaker *make) {
  197. make.top.equalTo(self.youpaipavatarView.mas_top).offset(-17.0f);
  198. make.centerX.equalTo(self.youpaipavatarView);
  199. make.size.mas_offset(CGSizeMake(45.0f, 45.0f));
  200. }];
  201. }else{
  202. [self.youpaiphatImgV mas_remakeConstraints:^(MASConstraintMaker *make) {
  203. make.top.equalTo(self.youpaipavatarView.mas_top).offset(-10.0f);
  204. make.left.equalTo(self.youpaipavatarView.mas_left).offset(-15.0f);
  205. make.size.mas_offset(CGSizeMake(45.0f, 45.0f));
  206. }];
  207. }
  208. }else{
  209. self.youpaiphatImgV.hidden = YES;
  210. }
  211. _youpaipmodel = youpaipmodel;
  212. }
  213. -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag {
  214. NSString *keyPathValue = [anim valueForKey:@"customType"];
  215. if ([keyPathValue isEqualToString:@"animation1"]) {
  216. [self.youpaipemojiImgV.layer removeAllAnimations];
  217. self.youpaipemojiImgV.image = nil;
  218. self.youpaipemojiImgV.hidden = YES;
  219. self.youpaipmodel.youpaipisEmoji = NO;
  220. self.youpaipmodel.youpaipemojiImg = @"";
  221. }
  222. }
  223. @end