
- 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
154 lines
4.3 KiB
Objective-C
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
|