// // YOUPAILZChatRoomSeatAvatarView.m // VQU // // Created by CY on 2021/10/28. // Copyright © 2021 MS. All rights reserved. // #import "YOUPAILZChatRoomSeatAvatarView.h" #import "SDWebImageCoderHelper.h" @interface YOUPAILZChatRoomSeatAvatarView () @end @implementation YOUPAILZChatRoomSeatAvatarView - (instancetype)initWithFrame:(CGRect)frame{ if (self = [super initWithFrame:frame]) { [self youpaifinitUI]; } return self; } - (void)youpaifinitUI{ YOUPAILZAvatarView *youpaipavatarView = [YOUPAILZAvatarView youpaifavatarViewWithFrame:CGRectMake(0.0f, 0.0f, self.mj_w, self.mj_h) avatarURL:nil personalityBoxURL:nil]; youpaipavatarView.hidden = YES; [self addSubview:youpaipavatarView]; self.youpaipavatarView = youpaipavatarView; [youpaipavatarView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self); make.top.mas_offset(0); make.size.mas_offset(self.mj_size); }]; LOTAnimationView *youpaiptalkingAnimationView = [LOTAnimationView animationWithFilePath:[[NSBundle mainBundle] pathForResource:@"ic_chatroom_seat_animation_new" ofType:@"json"]]; youpaiptalkingAnimationView.frame = CGRectMake(0.0f, 0.0f, self.mj_w * 1.8f, self.mj_h * 1.8f); youpaiptalkingAnimationView.loopAnimation = YES; youpaiptalkingAnimationView.contentMode = UIViewContentModeScaleAspectFill; [youpaiptalkingAnimationView play]; [self addSubview:youpaiptalkingAnimationView]; self.youpaiptalkingAnimationView = youpaiptalkingAnimationView; [youpaiptalkingAnimationView mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(youpaipavatarView); make.size.mas_offset(CGSizeMake(self.mj_w * 1.8f, self.mj_h * 1.8f)); }]; [self sendSubviewToBack:youpaiptalkingAnimationView]; UIImageView *youpaipdisableSendMessageImgV = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"vqu_images_chatroom_seat_disable_send_message"]]; youpaipdisableSendMessageImgV.hidden = YES; [self addSubview:youpaipdisableSendMessageImgV]; self.youpaipdisableSendMessageImgV = youpaipdisableSendMessageImgV; [youpaipdisableSendMessageImgV mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(youpaipavatarView.mas_right); make.bottom.equalTo(youpaipavatarView.mas_bottom); make.size.mas_offset(CGSizeMake(16.0f, 16.0f)); }]; UIImageView *youpaipunmannedStateImgV = [[UIImageView alloc] init]; youpaipunmannedStateImgV.hidden = YES; [self addSubview:youpaipunmannedStateImgV]; self.youpaipunmannedStateImgV = youpaipunmannedStateImgV; [youpaipunmannedStateImgV mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self); make.top.mas_offset(0); make.size.mas_offset(self.mj_size); }]; UIImageView *youpaipemojiImgV = [[UIImageView alloc] init]; youpaipemojiImgV.contentMode = UIViewContentModeScaleAspectFit; youpaipemojiImgV.hidden = YES; [self addSubview:youpaipemojiImgV]; self.youpaipemojiImgV = youpaipemojiImgV; [youpaipemojiImgV mas_makeConstraints:^(MASConstraintMaker *make) { make.center.equalTo(youpaipavatarView); make.size.mas_offset(self.mj_size); }]; UIImageView *youpaiphatImgV = [[UIImageView alloc] init]; youpaiphatImgV.hidden = YES; [self addSubview:youpaiphatImgV]; self.youpaiphatImgV = youpaiphatImgV; [youpaiphatImgV mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(youpaipavatarView.mas_top).offset(-17.0f); make.centerX.equalTo(youpaipavatarView); make.size.mas_offset(CGSizeMake(45.0f, 45.0f)); }]; } -(void)setYoupaipmodel:(YOUPAILZChatRoomSeatModel *)youpaipmodel{ self.youpaipavatarView.hidden = YES; self.youpaiptalkingAnimationView.hidden = YES; self.youpaipdisableSendMessageImgV.hidden = YES; self.youpaipunmannedStateImgV.hidden = YES; switch (youpaipmodel.youpaipseatState) { case LZChatRoomSeatStateWithFree:{ self.youpaipunmannedStateImgV.hidden = NO; switch (youpaipmodel.youpaipseatType) { case LZChatRoomSeatTypeWithOrdinary:{ if (youpaipmodel.youpaipplayType == 2) { NSString *imageName = @""; if (youpaipmodel.youpaipseatIndex <= 4) { imageName = @"vqu_image_chatroom_seat_woman"; if (youpaipmodel.youpaipisSelected) { imageName = [NSString stringWithFormat:@"%@_sel",imageName]; } }else{ imageName = @"vqu_image_chatroom_seat_man"; if (youpaipmodel.youpaipisSelected) { imageName = [NSString stringWithFormat:@"%@_sel",imageName]; } } self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName]; }else{ NSString *imageName = @"vqu_images_chatroom_seat_ordinary"; if (youpaipmodel.youpaipisSelected) { imageName = [NSString stringWithFormat:@"%@_sel",imageName]; } self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName]; } } break; case LZChatRoomSeatTypeWithGuest:{ if (youpaipmodel.youpaipplayType == 2) { NSString *imageName = @"vqu_image_chatroom_seat_man"; if (youpaipmodel.youpaipisSelected) { imageName = [NSString stringWithFormat:@"%@_sel",imageName]; } self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName]; }else{ NSString *imageName = @"vqu_images_chatroom_seat_guest"; if (youpaipmodel.youpaipisSelected) { imageName = [NSString stringWithFormat:@"%@_sel",imageName]; } self.youpaipunmannedStateImgV.image = [UIImage imageNamed:imageName]; } } break; case LZChatRoomSeatTypeWithHost: self.youpaipunmannedStateImgV.image = [UIImage imageNamed:@"vqu_images_chatroom_seat_host"]; break; default: break; } } break; case LZChatRoomSeatStateWithLock:{ self.youpaipunmannedStateImgV.hidden = NO; self.youpaipunmannedStateImgV.image = [UIImage imageNamed:@"vqu_images_chatroom_seat_lock"]; } break; case LZChatRoomSeatStateWithBusy:{ self.youpaipunmannedStateImgV.hidden = YES; self.youpaipavatarView.hidden = NO; self.youpaipavatarView.youpaipavatarURL = [LCTools getImageUrlWithAddress:youpaipmodel.youpaipuserInfo.youpaipavatar]; self.youpaipavatarView.youpaippersonalityBoxURL = [LCTools getImageUrlWithAddress:youpaipmodel.youpaipuserInfo.youpaipavatar_frame]; // NSLog(@"%@ -- %@",youpaipmodel.youpaipuserInfo.youpaipnickname,self.youpaipavatarView.youpaipavatarURL.absoluteString); } default: break; } if (youpaipmodel.youpaipisTalking) { self.youpaiptalkingAnimationView.hidden = NO; } if (youpaipmodel.youpaipisDisableMicrophone) { self.youpaipdisableSendMessageImgV.hidden = NO; } if (youpaipmodel.youpaipisEmoji) { self.youpaipemojiImgV.hidden = NO; if (![youpaipmodel.youpaipemojiImg isEqual:_youpaipmodel.youpaipemojiImg]) { self.youpaipemojiImgV.image = nil; [self.youpaipemojiImgV.layer removeAllAnimations]; @weakify(self); [[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) { @strongify(self); if(image != nil){ NSArray *imageFrames = [SDWebImageCoderHelper framesFromAnimatedImage:image]; NSTimeInterval totalDuration = 0.0; NSMutableArray *images = [NSMutableArray array]; for (SDWebImageFrame *imageFrame in imageFrames) { totalDuration += imageFrame.duration; [images addObject:imageFrame.image]; } // UIImageView 关键帧动画 CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"contents"]; // 动画结束之后的回调 animation.delegate = self; animation.duration = totalDuration; animation.repeatCount = 1; // 设置animation的唯一标示,这样在delegate回调的时候能够区分开来 [animation setValue:@"animation1" forKey:@"customType"]; animation.values = images; self.youpaipemojiImgV.image = image; [self.youpaipemojiImgV.layer addAnimation:animation forKey:@""]; } }]; } }else{ [self.youpaipemojiImgV.layer removeAllAnimations]; self.youpaipemojiImgV.hidden = YES; self.youpaipemojiImgV.image = nil; } if (youpaipmodel.youpaiphat_url.length != 0) { self.youpaiphatImgV.hidden = NO; self.youpaiphatImgV.image = nil; [self.youpaiphatImgV sd_setImageWithURL:[LCTools getImageUrlWithAddress:youpaipmodel.youpaiphat_url]]; if (youpaipmodel.youpaipseatIndex <= 4) { [self.youpaiphatImgV mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.youpaipavatarView.mas_top).offset(-17.0f); make.centerX.equalTo(self.youpaipavatarView); make.size.mas_offset(CGSizeMake(45.0f, 45.0f)); }]; }else{ [self.youpaiphatImgV mas_remakeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.youpaipavatarView.mas_top).offset(-10.0f); make.left.equalTo(self.youpaipavatarView.mas_left).offset(-15.0f); make.size.mas_offset(CGSizeMake(45.0f, 45.0f)); }]; } }else{ self.youpaiphatImgV.hidden = YES; } _youpaipmodel = youpaipmodel; } -(void)animationDidStop:(CAAnimation *)anim finished:(BOOL)flag { NSString *keyPathValue = [anim valueForKey:@"customType"]; if ([keyPathValue isEqualToString:@"animation1"]) { [self.youpaipemojiImgV.layer removeAllAnimations]; self.youpaipemojiImgV.image = nil; self.youpaipemojiImgV.hidden = YES; self.youpaipmodel.youpaipisEmoji = NO; self.youpaipmodel.youpaipemojiImg = @""; } } @end