// // MOHeadNormalView.m // TIMCommon // // Created by SuperC on 2025/5/19. // #import "MOHeadNormalView.h" #import "MOCustomSvgaPlayerView.h" #import @interface MOHeadNormalView () @property (nonatomic, strong) UIImageView *bgImgView; /** svga 播放 管理类 */ @property (nonatomic, strong) MOCustomSvgaPlayerView *aPlayer; @property (nonatomic, strong) SVGAParser *aParser; @end @implementation MOHeadNormalView - (instancetype)init { if (self = [super init]) { [self setupUI]; } return self; } - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { [self setupUI]; } return self; } - (void)setupUI{ self.backgroundColor = [UIColor clearColor]; self.userInteractionEnabled = NO; [self addSubview:self.bgImgView]; [self.bgImgView mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self); make.width.equalTo(@20.0); make.height.equalTo(@20.0); make.centerX.equalTo(self); }]; [self addSubview:self.aPlayer]; [self.aPlayer mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self); make.width.equalTo(@30.0); make.height.equalTo(@30.0); make.centerX.equalTo(self); }]; } - (void)setHeadImgWidth:(CGFloat)headImgWidth{ _headImgWidth = headImgWidth; //bgImgView 3 / 4 CGFloat width = headImgWidth * 1.7 ; [self.bgImgView mas_remakeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(@(width)); make.height.equalTo(@(width)); make.centerY.equalTo(self); make.centerX.equalTo(self); }]; //svga 9 / 12 CGFloat svgaWidth = headImgWidth * 1.7; [self.aPlayer mas_remakeConstraints:^(MASConstraintMaker *make) { make.width.equalTo(@(svgaWidth)); make.height.equalTo(@(svgaWidth)); make.centerY.equalTo(self); make.centerX.equalTo(self); }]; } - (void)setIsAnimation:(BOOL)isAnimation{ _isAnimation = isAnimation; [self updataViewStatus]; } - (void)setEffectType:(double)effectType{ _effectType = effectType; [self updataViewStatus]; } - (void)updataViewStatus{ if(self.isLiving){ //直播中 self.aPlayer.hidden = YES; self.bgImgView.hidden = YES; } else{ //不在直播中, 显示头像框 if(self.effectType == 2){//svga self.aPlayer.hidden = NO; self.bgImgView.hidden = YES; } else if (self.effectType == 0 || self.effectType == 1){//png 或 webp self.aPlayer.hidden = YES; self.bgImgView.hidden = NO; } else{ self.aPlayer.hidden = YES; self.bgImgView.hidden = YES; } } } - (void)setImgUrlStr:(NSString *)imgUrlStr{ _imgUrlStr = imgUrlStr; @weakify(self); if(self.effectType == 2){//svga [self.aPlayer clear]; [self.aParser parseWithURL:[NSURL URLWithString:imgUrlStr] completionBlock:^(SVGAVideoEntity * _Nullable videoItem) { @strongify(self); if (videoItem) { self.aPlayer.videoItem = videoItem; [self.aPlayer startAnimation]; } } failureBlock:^(NSError * _Nullable error) { NSLog(@"播放失败~~~~~~~~"); }]; } else if (self.effectType == 0 || self.effectType == 1){//png 或 webp [self.bgImgView sd_setImageWithURL:[NSURL URLWithString:imgUrlStr]]; } } #pragma mark - Lazy - (UIImageView *)bgImgView{ if(!_bgImgView){ _bgImgView = [[UIImageView alloc] init]; _bgImgView.contentMode = UIViewContentModeScaleAspectFit; _bgImgView.hidden = YES; } return _bgImgView; } - (MOCustomSvgaPlayerView *)aPlayer{ if (_aPlayer == nil) { _aPlayer = [[MOCustomSvgaPlayerView alloc] init]; _aPlayer.contentMode = UIViewContentModeScaleAspectFill; _aPlayer.hidden = YES; _aPlayer.loops = 0; _aPlayer.clearsAfterStop = NO; } return _aPlayer; } - (SVGAParser *)aParser{ if (_aParser == nil) { _aParser = [[SVGAParser alloc] init]; } return _aParser; } @end