Files
real-e-party-iOS/YuMi/CustomUI/MoliAvatar.m
edwinQQQ a35a711be6 chore: Initial clean commit
- Removed YuMi/Library/ (138 MB, not tracked)
- Removed YuMi/Resources/ (23 MB, not tracked)
- Removed old version assets (566 files, not tracked)
- Excluded Pods/, xcuserdata/ and other build artifacts
- Clean repository optimized for company server deployment
2025-10-09 16:19:14 +08:00

154 lines
4.3 KiB
Objective-C

//
// MoliAvatar.m
// YuMi
//
// Created by P on 2024/12/11.
//
#import "MoliAvatar.h"
#import "UserInfoModel.h"
#import <SVGA.h>
#import <YYImage/YYAnimatedImageView.h>
#import "UIView+VAP.h"
#import "SpriteSheetImageManager.h"
@interface MoliAvatar ()
@property (nonatomic,strong) NetImageView *avatarView;
///序列帧
@property (nonatomic, strong) SpriteSheetImageManager *sequenceFrameManager;
@property (nonatomic,strong) YYAnimatedImageView *sequenceFrameHeadWear;
///SVGA
@property (nonatomic, strong) SVGAImageView *headWearSvgaImageView;
@end
@implementation MoliAvatar
- (void)dealloc
{
if (_headWearSvgaImageView) {
[_headWearSvgaImageView stopAnimation];
}
}
- (instancetype)init {
if (self = [super init]) {
[self addSubview:self.avatarView];
[self.avatarView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self);
}];
}
return self;
}
- (void)layoutSubviews {
[super layoutSubviews];
[self.avatarView setCornerRadius:self.frame.size.height / 2];
}
- (void)setUserInfo:(UserInfoModel *)userInfo {
_userInfo = userInfo;
self.avatarView.imageUrl = userInfo.avatar;
NSString *headerUrl = self.userInfo.headwearEffect.length > 0 ? self.userInfo.headwearEffect : self.userInfo.headwearPic;
if ([NSString isEmpty:headerUrl]) {
return;
}
if ([userInfo isHeadWearSVGA]) {
[self setupAndPlaySVGA: headerUrl];
} else {
[self setupAndPlayAnimate: headerUrl];
}
}
- (void)setupAndPlaySVGA:(NSString *)url {
[self addSubview:self.headWearSvgaImageView];
[self.headWearSvgaImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.avatarView);
make.size.mas_equalTo(self.avatarView).multipliedBy(1.4);
}];
[self.headWearSvgaImageView setImageName:url];
}
- (void)setupAndPlayAnimate:(NSString *)url {
[self addSubview:self.sequenceFrameHeadWear];
[self.sequenceFrameHeadWear mas_makeConstraints:^(MASConstraintMaker *make) {
make.center.mas_equalTo(self.avatarView);
make.size.mas_equalTo(self.avatarView).multipliedBy(1.4);
}];
@kWeakify(self);
[self.sequenceFrameManager loadSpriteSheetImageWithURL:[NSURL URLWithString:url]
completionBlock:^(YYSpriteSheetImage * _Nullable sprit) {
@kStrongify(self);
self.sequenceFrameHeadWear.image = sprit;
} failureBlock:^(NSError * _Nullable error) {}];
}
#pragma mark -
- (void)clickAvatarAction {
if (self.handleTapAvatar) {
self.handleTapAvatar();
}
}
#pragma mark -
#pragma mark -
-(NetImageView *)avatarView{
if (!_avatarView){
NetImageConfig * config = [[NetImageConfig alloc] init];
config.placeHolder = [UIImageConstant defaultAvatarPlaceholder];
config.imageType = ImageTypeUserIcon;
_avatarView = [[NetImageView alloc]initWithConfig:config];
_avatarView.layer.cornerRadius = kGetScaleWidth(41);
_avatarView.layer.masksToBounds = YES;
_avatarView.layer.borderWidth = 1;
_avatarView.userInteractionEnabled = YES;
_avatarView.layer.borderColor = [UIColor whiteColor].CGColor;
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(clickAvatarAction)];
[_avatarView addGestureRecognizer:tap];
}
return _avatarView;
}
- (SVGAImageView *)headWearSvgaImageView {
if (!_headWearSvgaImageView) {
_headWearSvgaImageView = [[SVGAImageView alloc]init];
_headWearSvgaImageView.backgroundColor = [UIColor clearColor];
_headWearSvgaImageView.frame = self.bounds;
_headWearSvgaImageView.userInteractionEnabled = NO;
_headWearSvgaImageView.autoPlay = YES;
}
return _headWearSvgaImageView;
}
- (YYAnimatedImageView *)sequenceFrameHeadWear {
if (!_sequenceFrameHeadWear) {
_sequenceFrameHeadWear = [[YYAnimatedImageView alloc] init];
_sequenceFrameHeadWear.backgroundColor = [UIColor clearColor];
_sequenceFrameHeadWear.contentMode = UIViewContentModeScaleAspectFit;
}
return _sequenceFrameHeadWear;
}
- (SpriteSheetImageManager *)sequenceFrameManager {
if (!_sequenceFrameManager) {
_sequenceFrameManager = [[SpriteSheetImageManager alloc] init];
}
return _sequenceFrameManager;
}
@end