Files
featherVoice/QXLive/Mine(音域)/View/编辑/QXUserInfoEditHeaderView.m

188 lines
9.2 KiB
Mathematica
Raw Normal View History

2025-08-08 10:49:36 +08:00
//
// QXUserInfoEditHeaderView.m
// QXLive
//
// Created by on 2025/5/20.
//
#import "QXUserInfoEditHeaderView.h"
#import <SDCycleScrollView/SDCycleScrollView.h>
#import "QXSeatHeaderView.h"
#import "UIButton+QX.h"
#import <TZImagePickerController/TZImageManager.h>
#import <TZImagePickerController/TZImagePickerController.h>
#import "UIImage+QX.h"
#import "NSString+QX.h"
#import "QXOSSManager.h"
#import <ImSDK_Plus/ImSDK_Plus.h>
#import "QXMineNetwork.h"
@interface QXUserInfoEditHeaderView()<SDCycleScrollViewDelegate,TZImagePickerControllerDelegate>
@property (nonatomic,strong)SDCycleScrollView * cycleScrollView;
@property (nonatomic,strong) QXSeatHeaderView* headerView;
@property (nonatomic,strong) UIButton* headerBtn;
@property (nonatomic,strong) UIView * bgView;
@property (nonatomic,strong) UILabel * titleLabel;
@property (nonatomic,strong) NSString * avartar;
@end
@implementation QXUserInfoEditHeaderView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initSubviews];
}
return self;
}
-(void)initSubviews{
self.cycleScrollView = [SDCycleScrollView cycleScrollViewWithFrame:CGRectMake(0, 0, self.width, 169+kSafeAreaTop+16) delegate:self placeholderImage:nil];
2025-10-20 09:43:10 +08:00
self.cycleScrollView.backgroundColor = [UIColor clearColor];
2025-08-08 10:49:36 +08:00
self.cycleScrollView.imageURLStringsGroup = @[[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@""];
self.cycleScrollView.bannerImageViewContentMode = UIViewContentModeScaleAspectFill;
[self addSubview:self.cycleScrollView];
self.bgView = [[UIView alloc] initWithFrame:CGRectMake(0, self.cycleScrollView.bottom-16, self.width, 94)];
self.bgView.backgroundColor = [UIColor whiteColor];
[self.bgView addRoundedCornersWithRadius:16 byRoundingCorners:(UIRectCornerTopLeft|UIRectCornerTopRight)];
[self addSubview:self.bgView];
self.titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(80, self.bgView.height-40, self.bgView.width-160, 40)];
self.titleLabel.font = [UIFont systemFontOfSize:12];
self.titleLabel.numberOfLines = 2;
self.titleLabel.textColor = RGB16(0x999999);
self.titleLabel.text = QXText(@"尊敬的用户每月可修改2次剩余2次 使用头像卡不限更换次数还剩0张");
2025-10-20 09:43:10 +08:00
self.titleLabel.hidden = YES;
2025-08-08 10:49:36 +08:00
[self.bgView addSubview:self.titleLabel];
self.headerView = [[QXSeatHeaderView alloc] initWithFrame:CGRectMake((self.width-104)/2, self.bgView.top-52, 104, 104)];
self.headerView.layer.borderWidth = 1.5;
self.headerView.layer.borderColor = UIColor.whiteColor.CGColor;
[self.headerView addRoundedCornersWithRadius:52];
[self.headerView setHeadIcon:[QXGlobal shareGlobal].loginModel.avatar dress:@""];
[self addSubview:self.headerView];
self.headerBtn = [[UIButton alloc] initWithFrame:CGRectMake((self.width-100)/2, self.headerView.top+2, 100, 100)];
[self.headerBtn addRoundedCornersWithRadius:52];
self.headerBtn.backgroundColor = RGB16A(0x333333, 0.22);
[self.headerBtn setImage:[UIImage imageNamed:@"userinfo_header_edit"] forState:(UIControlStateNormal)];
[self.headerBtn setTitle:QXText(@"更换头像") forState:(UIControlStateNormal)];
self.headerBtn.titleLabel.font = [UIFont systemFontOfSize:14];
[self.headerBtn setTitleColor:[UIColor whiteColor] forState:(UIControlStateNormal)];
[self.headerBtn addTarget:self action:@selector(headerAction) forControlEvents:(UIControlEventTouchUpInside)];
[self.headerBtn qx_layoutButtonNOSizeToFitWithEdgeInsetsStyle:(QXButtonEdgeInsetsStyleTop) imageTitleSpace:2];
[self addSubview:self.headerBtn];
}
-(void)headerAction{
[self selectAlbumPhoto];
}
-(void)setImgs:(NSArray *)imgs{
_imgs = imgs;
if (imgs.count == 0) {
self.cycleScrollView.imageURLStringsGroup = @[[QXGlobal shareGlobal].loginModel.avatar?[QXGlobal shareGlobal].loginModel.avatar:@""];
}else{
self.cycleScrollView.imageURLStringsGroup = imgs;
}
}
-(void)selectAlbumPhoto {
TZImagePickerController *imagePickerVc = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:nil];
imagePickerVc.maxImagesCount = 1;
imagePickerVc.allowCameraLocation = NO;
imagePickerVc.allowPickingOriginalPhoto = NO;
imagePickerVc.allowTakeVideo = NO;
imagePickerVc.allowPickingVideo = NO;
imagePickerVc.showSelectBtn = NO;
imagePickerVc.allowCrop = YES;
imagePickerVc.cropRect = CGRectMake(0, (SCREEN_HEIGHT-SCREEN_WIDTH)/2, SCREEN_WIDTH, SCREEN_WIDTH);
MJWeakSelf
[imagePickerVc setDidFinishPickingPhotosHandle:^(NSArray<UIImage *> *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
if (photos.count) {
NSData *imageData = [photos.firstObject qx_compressImageQualityWithToByte:(SCREEN_WIDTH*SCREEN_HEIGHT*2)];
[weakSelf OSSUploadPhotoWithFileData:imageData contentType:[NSString contentTypeWithImageData:imageData]];
}
}];
imagePickerVc.modalPresentationStyle = UIModalPresentationFullScreen;
[imagePickerVc.navigationBar setBackgroundImage:[UIImage qx_imageWithColor:RGB16(0x333333)] forBarMetrics:UIBarMetricsDefault];
[self.viewController presentViewController:imagePickerVc animated:YES completion:nil];
}
- (void)OSSUploadPhotoWithFileData:(NSData *)fileData contentType:(NSString *)contentType {
[self OSSUploadPhotoWithFileData:fileData contentType:contentType isVideoCover:NO];
}
- (void)OSSUploadPhotoWithFileData:(NSData *)fileData contentType:(NSString *)contentType isVideoCover:(BOOL)isVideoCover {
if (!fileData || !contentType) {
showToastInView(QXText(@"资源加载错误"), self.viewController.view);
return;
}
if (fileData.length > 1024*1024 && [contentType isEqualToString:IMG_FILE_BASE_PATH]) {
showToastInView(QXText(@"请不要上传超过1M的头像"), self.viewController.view);
return;
}
NSMutableArray *files = [[NSMutableArray alloc] initWithObjects:fileData, nil];
2025-10-24 10:52:40 +08:00
// NSString *fileBasePath = IMG_FILE_BASE_PATH;//
// NSString *fileName = [NSString stringWithFormat:@"%@%@/%@.%@",fileBasePath,[[QXOSSManager sharedInstance] currentDate],[NSUUID UUID].UUIDString,contentType];
// NSMutableArray *fileNames = [[NSMutableArray alloc] initWithObjects:fileName, nil];
// __weak typeof(self)weakSelf = self;
// showLoadingInView(self.viewController.view);
// [[QXOSSManager sharedInstance] uploadFile:files withObjectKey:fileNames isAsync:YES complete:^(NSArray<NSString *> *names, UploadImageState state) {
// dispatch_async(dispatch_get_main_queue(), ^{
// hideLoadingInView(weakSelf.viewController.view);
// });
// if (state == UploadImageSuccess) {
// NSString *fileName = [names lastObject];
// NSString *fileUrl =[NSString stringWithFormat:@"https://%@.%@/%@",OSS_BUCKET_NAME,OSSEndPoint,fileName];
// weakSelf.avartar = fileUrl;
// [weakSelf chamgeAvatar];
// }else{
// showToastInView(QXText(@"文件上传失败,请重新尝试"), weakSelf.viewController.view);
// }
// }];
2025-08-08 10:49:36 +08:00
__weak typeof(self)weakSelf = self;
2025-10-24 10:52:40 +08:00
NSString *fileName = [NSString stringWithFormat:@"%@.%@",[[QXCOSUploadManager shareManager] currentDate],contentType];
[[QXCOSUploadManager shareManager] uploadFile:files withObjectKey:@[fileName] isAsync:YES complete:^(NSArray<NSString *> * _Nonnull names, QXCOSUploadImageState state) {
QXLOG(@"uploadstate --- %ld ---url---%@",state,names);
if (state == QXCOSUploadImageSuccess) {
weakSelf.avartar = names.firstObject;
2025-08-08 10:49:36 +08:00
[weakSelf chamgeAvatar];
}else{
2025-10-24 10:52:40 +08:00
QXLOG(@"文件上传失败,请重新尝试");
2025-08-08 10:49:36 +08:00
}
}];
}
-(void)chamgeAvatar{
MJWeakSelf
[QXMineNetwork editUserInfoWithNickname:@""
birthday:@""
sex:@""
avatar:self.avartar
images:@""
profile:@""
tag_id:@""
successBlock:^(NSDictionary * _Nonnull dict) {
///
[QXGlobal shareGlobal].loginModel.avatar = weakSelf.avartar;
[weakSelf.headerView.headImageView sd_setImageWithURL:[NSURL URLWithString:weakSelf.avartar]];
[[QXGlobal shareGlobal] updateUserInfoWithMolde:[QXGlobal shareGlobal].loginModel];
if (weakSelf.imgs.count == 0) {
weakSelf.cycleScrollView.imageURLStringsGroup = @[[QXGlobal shareGlobal].loginModel.avatar];
}
///
V2TIMUserFullInfo *info = [[V2TIMUserFullInfo alloc] init];
info.faceURL = weakSelf.avartar;
info.nickName = [QXGlobal shareGlobal].loginModel.nickname;
[[V2TIMManager sharedInstance] setSelfInfo:info succ:^{
QXLOG(@"腾讯IM同步个人信息成功");
} fail:^(int code, NSString * _Nullable desc) {
QXLOG(@"腾讯IM同步个人信息失败");
}];
showToast(QXText(@"修改成功"));
} failBlock:^(NSError * _Nonnull error, NSString * _Nonnull msg) {
showToast(msg);
}];
}
@end