
主要变更: 1. 新增 EPImageUploader.swift 和 EPProgressHUD.swift,提供图片批量上传和进度显示功能。 2. 新建 EPMomentAPISwiftHelper.swift,封装动态 API 的 Swift 版本。 3. 更新 EPMomentPublishViewController,集成新上传功能并实现发布成功通知。 4. 创建多个文档,包括实施报告、检查清单和快速使用指南,详细记录功能实现和使用方法。 5. 更新 Bridging Header,确保 Swift 和 Objective-C 代码的互操作性。 此功能旨在提升用户体验,简化动态发布流程,并提供清晰的文档支持。
166 lines
4.8 KiB
Objective-C
166 lines
4.8 KiB
Objective-C
//
|
||
// EPMineViewController.m
|
||
// YuMi
|
||
//
|
||
// Created by AI on 2025-10-09.
|
||
// Copyright © 2025 YuMi. All rights reserved.
|
||
//
|
||
|
||
#import "EPMineViewController.h"
|
||
#import "EPMineHeaderView.h"
|
||
#import "EPMomentListView.h"
|
||
#import "EPMineAPIHelper.h"
|
||
#import "AccountInfoStorage.h"
|
||
#import "UserInfoModel.h"
|
||
|
||
@interface EPMineViewController ()
|
||
|
||
// MARK: - UI Components
|
||
|
||
/// 动态列表视图(复用 EPMomentListView)
|
||
@property (nonatomic, strong) EPMomentListView *momentListView;
|
||
|
||
/// 顶部个人信息卡片
|
||
@property (nonatomic, strong) EPMineHeaderView *headerView;
|
||
|
||
// MARK: - Data
|
||
|
||
/// 用户信息模型
|
||
@property (nonatomic, strong) UserInfoModel *userInfo;
|
||
|
||
/// API Helper
|
||
@property (nonatomic, strong) EPMineAPIHelper *apiHelper;
|
||
|
||
@end
|
||
|
||
@implementation EPMineViewController
|
||
|
||
// MARK: - Lifecycle
|
||
|
||
- (void)viewDidLoad {
|
||
[super viewDidLoad];
|
||
|
||
[self setupUI];
|
||
|
||
NSLog(@"[EPMineViewController] 个人主页加载完成");
|
||
}
|
||
|
||
- (void)viewWillAppear:(BOOL)animated {
|
||
[super viewWillAppear:animated];
|
||
|
||
// 隐藏导航栏
|
||
[self.navigationController setNavigationBarHidden:YES animated:animated];
|
||
|
||
// 每次显示时加载最新数据
|
||
[self loadUserDetailInfo];
|
||
}
|
||
|
||
// MARK: - Setup
|
||
- (void)setupUI {
|
||
// 先设置纯色背景作为兜底,避免白色闪烁
|
||
self.view.backgroundColor = [UIColor clearColor];
|
||
|
||
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:kImage(@"vc_bg")];
|
||
bgImageView.contentMode = UIViewContentModeScaleAspectFill;
|
||
bgImageView.clipsToBounds = YES;
|
||
[self.view addSubview:bgImageView];
|
||
[bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.edges.mas_equalTo(self.view);
|
||
}];
|
||
|
||
[self setupHeaderView];
|
||
[self setupMomentListView];
|
||
|
||
NSLog(@"[EPMineViewController] UI 设置完成");
|
||
}
|
||
|
||
- (void)setupHeaderView {
|
||
self.headerView = [[EPMineHeaderView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300)];
|
||
|
||
[self.view addSubview:self.headerView];
|
||
|
||
[self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.view).offset(20);
|
||
make.leading.trailing.equalTo(self.view);
|
||
make.height.equalTo(@300);
|
||
}];
|
||
}
|
||
|
||
- (void)setupMomentListView {
|
||
[self.view addSubview:self.momentListView];
|
||
|
||
[self.momentListView mas_makeConstraints:^(MASConstraintMaker *make) {
|
||
make.top.equalTo(self.headerView.mas_bottom).offset(10);
|
||
make.leading.trailing.bottom.equalTo(self.view);
|
||
}];
|
||
}
|
||
|
||
// MARK: - Data Loading
|
||
|
||
- (void)loadUserDetailInfo {
|
||
NSString *uid = [[AccountInfoStorage instance] getUid];
|
||
if (!uid.length) {
|
||
NSLog(@"[EPMineViewController] 未登录,无法获取用户信息");
|
||
return;
|
||
}
|
||
|
||
__weak typeof(self) weakSelf = self;
|
||
[self.apiHelper getUserDetailInfoWithUid:uid completion:^(UserInfoModel * _Nullable userInfo) {
|
||
__strong typeof(weakSelf) self = weakSelf;
|
||
self.userInfo = userInfo;
|
||
|
||
// 更新头部视图
|
||
NSDictionary *userInfoDict = @{
|
||
@"nickname": userInfo.nick ?: @"未设置昵称",
|
||
@"avatar": userInfo.avatar ?: @"",
|
||
@"uid": userInfo.uid > 0 ? @(userInfo.uid).stringValue : @"",
|
||
@"followers": @(userInfo.fansNum),
|
||
@"following": @(userInfo.followNum),
|
||
};
|
||
[self.headerView updateWithUserInfo:userInfoDict];
|
||
|
||
// 使用本地数组模式显示用户动态
|
||
[self.momentListView loadWithDynamicInfo:userInfo.dynamicInfo refreshCallback:^{
|
||
[self loadUserDetailInfo];
|
||
}];
|
||
|
||
NSLog(@"[EPMineViewController] 用户详情加载成功: %@ (动态数: %lu)",
|
||
userInfo.nick, (unsigned long)userInfo.dynamicInfo.count);
|
||
|
||
} failure:^(NSInteger code, NSString * _Nullable msg) {
|
||
NSLog(@"[EPMineViewController] 用户详情加载失败: code=%ld, msg=%@", (long)code, msg);
|
||
}];
|
||
}
|
||
|
||
// MARK: - Lazy Loading
|
||
|
||
- (EPMineHeaderView *)headerView {
|
||
if (!_headerView) {
|
||
_headerView = [[EPMineHeaderView alloc] initWithFrame:CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 300)];
|
||
}
|
||
return _headerView;
|
||
}
|
||
|
||
- (EPMomentListView *)momentListView {
|
||
if (!_momentListView) {
|
||
_momentListView = [[EPMomentListView alloc] initWithFrame:CGRectZero];
|
||
|
||
__weak typeof(self) weakSelf = self;
|
||
_momentListView.onSelectMoment = ^(NSInteger index) {
|
||
__strong typeof(weakSelf) self = weakSelf;
|
||
NSLog(@"[EPMineViewController] 点击了第 %ld 条动态", (long)index);
|
||
// TODO: 跳转到动态详情页
|
||
};
|
||
}
|
||
return _momentListView;
|
||
}
|
||
|
||
- (EPMineAPIHelper *)apiHelper {
|
||
if (!_apiHelper) {
|
||
_apiHelper = [[EPMineAPIHelper alloc] init];
|
||
}
|
||
return _apiHelper;
|
||
}
|
||
|
||
@end
|