You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

390 lines
16 KiB

  1. //
  2. // MyViewController.m
  3. // HC
  4. //
  5. // Created by huilinLi on 2025/11/25.
  6. //
  7. #import "MyViewController.h"
  8. #import <UIKit/UIKit.h>
  9. #import "CommonTabBar.h"
  10. #import "HomeViewController.h"
  11. #import "ViewController.h"
  12. #import "QuotationViewController.h"
  13. @implementation MyViewController
  14. - (void)viewDidLoad {
  15. [super viewDidLoad];
  16. self.view.backgroundColor = [UIColor blackColor];
  17. [self setupUI];
  18. }
  19. - (void)setupUI {
  20. UIScrollView *scrollView = [[UIScrollView alloc] init];
  21. scrollView.translatesAutoresizingMaskIntoConstraints = NO;
  22. scrollView.backgroundColor = [UIColor blackColor];
  23. [self.view addSubview:scrollView];
  24. UIView *contentView = [[UIView alloc] init];
  25. contentView.translatesAutoresizingMaskIntoConstraints = NO;
  26. contentView.backgroundColor = [UIColor blackColor];
  27. [scrollView addSubview:contentView];
  28. [self setupUserHeaderInContentView:contentView];
  29. [self setupCoinDiamondInContentView:contentView];
  30. [self setupSettingListInContentView:contentView];
  31. [self setupLogoutButtonInContentView:contentView];
  32. [self setupTabBar];
  33. [NSLayoutConstraint activateConstraints:@[
  34. [scrollView.topAnchor constraintEqualToAnchor:self.view.topAnchor],
  35. [scrollView.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
  36. [scrollView.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
  37. [scrollView.bottomAnchor constraintEqualToAnchor:self.tabBar.topAnchor],
  38. [contentView.topAnchor constraintEqualToAnchor:scrollView.topAnchor],
  39. [contentView.leadingAnchor constraintEqualToAnchor:scrollView.leadingAnchor],
  40. [contentView.trailingAnchor constraintEqualToAnchor:scrollView.trailingAnchor],
  41. [contentView.bottomAnchor constraintEqualToAnchor:scrollView.bottomAnchor],
  42. [contentView.widthAnchor constraintEqualToAnchor:scrollView.widthAnchor]
  43. ]];
  44. }
  45. #pragma mark - 上边儿
  46. - (void)setupUserHeaderInContentView:(UIView *)contentView {
  47. UIButton *settingBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  48. [settingBtn setImage:[UIImage systemImageNamed:@"gearshape"] forState:UIControlStateNormal];
  49. settingBtn.tintColor = [UIColor whiteColor];
  50. settingBtn.translatesAutoresizingMaskIntoConstraints = NO;
  51. [contentView addSubview:settingBtn];
  52. UIImageView *avatar = [self createImageViewWithImage:@"hqz" contentMode:UIViewContentModeScaleAspectFill cornerRadius:40];
  53. [contentView addSubview:avatar];
  54. UILabel *nameLabel = [self createLabelWithText:@"演示机李慧琳" fontSize:18 textColor:[UIColor whiteColor]];
  55. [contentView addSubview:nameLabel];
  56. UILabel *idLabel = [self createLabelWithText:@"ID: 90047681" fontSize:14 textColor:[UIColor whiteColor]];
  57. [contentView addSubview:idLabel];
  58. UIButton *signBtn = [self createButtonWithTitle:@"已签到" bgColor:[UIColor whiteColor] cornerRadius:15];
  59. [signBtn setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
  60. [contentView addSubview:signBtn];
  61. [NSLayoutConstraint activateConstraints:@[
  62. [avatar.topAnchor constraintEqualToAnchor:contentView.topAnchor constant:20],
  63. [avatar.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor constant:20],
  64. [avatar.widthAnchor constraintEqualToConstant:80],
  65. [avatar.heightAnchor constraintEqualToConstant:80],
  66. [nameLabel.centerYAnchor constraintEqualToAnchor:avatar.centerYAnchor constant:-10],
  67. [nameLabel.leadingAnchor constraintEqualToAnchor:avatar.trailingAnchor constant:15],
  68. [idLabel.topAnchor constraintEqualToAnchor:nameLabel.bottomAnchor constant:5],
  69. [idLabel.leadingAnchor constraintEqualToAnchor:nameLabel.leadingAnchor],
  70. [signBtn.centerYAnchor constraintEqualToAnchor:avatar.centerYAnchor],
  71. [signBtn.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:-20],
  72. [signBtn.widthAnchor constraintEqualToConstant:90],
  73. [signBtn.heightAnchor constraintEqualToConstant:30],
  74. [settingBtn.topAnchor constraintEqualToAnchor:contentView.topAnchor constant:-35],
  75. [settingBtn.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor constant:-20],
  76. [settingBtn.widthAnchor constraintEqualToConstant:24],
  77. [settingBtn.heightAnchor constraintEqualToConstant:24]
  78. ]];
  79. }
  80. #pragma mark - 金币钻石
  81. - (void)setupCoinDiamondInContentView:(UIView *)contentView {
  82. NSArray *itemConfigs = @[
  83. @{@"icon":@"hqz", @"text":@"6011.56"},
  84. @{@"icon":@"hqz", @"text":@"0"}
  85. ];
  86. UIView *containerView = [[UIView alloc] init];
  87. containerView.translatesAutoresizingMaskIntoConstraints = NO;
  88. [contentView addSubview:containerView];
  89. for (int i = 0; i < itemConfigs.count; i++) {
  90. NSDictionary *config = itemConfigs[i];
  91. UIButton *btn = [self createInfoButtonWithConfig:config];
  92. btn.tag = 100 + i;
  93. [containerView addSubview:btn];
  94. [NSLayoutConstraint activateConstraints:@[
  95. [btn.topAnchor constraintEqualToAnchor:containerView.topAnchor],
  96. [btn.bottomAnchor constraintEqualToAnchor:containerView.bottomAnchor],
  97. [btn.widthAnchor constraintEqualToAnchor:containerView.widthAnchor multiplier:0.5],
  98. (i == 0) ? [btn.leadingAnchor constraintEqualToAnchor:containerView.leadingAnchor] : [btn.trailingAnchor constraintEqualToAnchor:containerView.trailingAnchor]
  99. ]];
  100. }
  101. UIView *verticalDivider = [self createVerticalDivider];
  102. [containerView addSubview:verticalDivider];
  103. [NSLayoutConstraint activateConstraints:@[
  104. [containerView.topAnchor constraintEqualToAnchor:contentView.subviews[1].bottomAnchor constant:20],
  105. [containerView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor],
  106. [containerView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor],
  107. [containerView.heightAnchor constraintEqualToConstant:80],
  108. [verticalDivider.centerXAnchor constraintEqualToAnchor:containerView.centerXAnchor],
  109. [verticalDivider.topAnchor constraintEqualToAnchor:containerView.topAnchor constant:10],
  110. [verticalDivider.bottomAnchor constraintEqualToAnchor:containerView.bottomAnchor constant:-10],
  111. [verticalDivider.widthAnchor constraintEqualToConstant:0.5]
  112. ]];
  113. }
  114. #pragma mark - 设置列表
  115. - (void)setupSettingListInContentView:(UIView *)contentView {
  116. NSArray *rowTexts = @[
  117. @"账号与安全",
  118. @"服务期限",
  119. @"行情设置",
  120. @"通用设置",
  121. @"金币记录",
  122. @"分享奖励",
  123. @"联系我们",
  124. @"新版本更新",
  125. @"意见反馈",
  126. @"关于Homily Chart"
  127. ];
  128. // 金币钻石容器
  129. UIView *coinContainer = contentView.subviews.lastObject;
  130. CGFloat topOffset = 0;
  131. for (int i = 0; i < rowTexts.count; i++) {
  132. UIView *itemView = [self createCommonRowWithText:rowTexts[i]];
  133. [contentView addSubview:itemView];
  134. [NSLayoutConstraint activateConstraints:@[
  135. [itemView.topAnchor constraintEqualToAnchor:coinContainer.bottomAnchor constant:topOffset + 20],
  136. [itemView.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor],
  137. [itemView.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor],
  138. [itemView.heightAnchor constraintEqualToConstant:60]
  139. ]];
  140. if (i < rowTexts.count - 1) {
  141. UIView *divider = [self createDividerWithLeading:20];
  142. [contentView addSubview:divider];
  143. [NSLayoutConstraint activateConstraints:@[
  144. [divider.topAnchor constraintEqualToAnchor:itemView.bottomAnchor],
  145. [divider.leadingAnchor constraintEqualToAnchor:contentView.leadingAnchor constant:20],
  146. [divider.trailingAnchor constraintEqualToAnchor:contentView.trailingAnchor],
  147. [divider.heightAnchor constraintEqualToConstant:0.5]
  148. ]];
  149. }
  150. topOffset += 60;
  151. }
  152. self.lastSettingItem = contentView.subviews.lastObject;
  153. }
  154. #pragma mark - 退出登录
  155. - (void)setupLogoutButtonInContentView:(UIView *)contentView {
  156. UIButton *logoutBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  157. [logoutBtn setTitle:@"退出登录" forState:UIControlStateNormal];
  158. [logoutBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
  159. logoutBtn.titleLabel.font = [UIFont systemFontOfSize:16 weight:UIFontWeightMedium];
  160. logoutBtn.translatesAutoresizingMaskIntoConstraints = NO;
  161. [logoutBtn addTarget:self action:@selector(logoutTapped) forControlEvents:UIControlEventTouchUpInside];
  162. [contentView addSubview:logoutBtn];
  163. [NSLayoutConstraint activateConstraints:@[
  164. [logoutBtn.topAnchor constraintEqualToAnchor:self.lastSettingItem.bottomAnchor constant:20],
  165. [logoutBtn.centerXAnchor constraintEqualToAnchor:contentView.centerXAnchor],
  166. [logoutBtn.widthAnchor constraintEqualToConstant:120],
  167. [logoutBtn.heightAnchor constraintEqualToConstant:40],
  168. [contentView.bottomAnchor constraintEqualToAnchor:logoutBtn.bottomAnchor constant:20]
  169. ]];
  170. }
  171. #pragma mark - 退出登录方法
  172. - (void)logoutTapped {
  173. ViewController *loginVC = [[ViewController alloc] init];
  174. loginVC.hidesBottomBarWhenPushed = YES; // 隐藏TabBar
  175. [self.navigationController pushViewController:loginVC animated:YES];
  176. }
  177. #pragma mark - 底部TabBar
  178. - (void)setupTabBar {
  179. NSArray *tabItems = @[
  180. @{@"title":@"首页", @"icon":@"house.fill", @"selected":@NO},
  181. @{@"title":@"行情", @"icon":@"chart.line.uptrend.xyaxis", @"selected":@NO},
  182. @{@"title":@"自选", @"icon":@"plus", @"selected":@NO},
  183. @{@"title":@"我的", @"icon":@"person", @"selected":@YES}
  184. ];
  185. self.tabBar = [[CommonTabBar alloc] initWithTabItems:tabItems];
  186. self.tabBar.delegate = self;
  187. self.tabBar.translatesAutoresizingMaskIntoConstraints = NO;
  188. [self.view addSubview:self.tabBar];
  189. [NSLayoutConstraint activateConstraints:@[
  190. [self.tabBar.bottomAnchor constraintEqualToAnchor:self.view.safeAreaLayoutGuide.bottomAnchor],
  191. [self.tabBar.leadingAnchor constraintEqualToAnchor:self.view.leadingAnchor],
  192. [self.tabBar.trailingAnchor constraintEqualToAnchor:self.view.trailingAnchor],
  193. [self.tabBar.heightAnchor constraintEqualToConstant:49]
  194. ]];
  195. }
  196. #pragma mark - 工具方法
  197. - (UIButton *)createInfoButtonWithConfig:(NSDictionary *)config {
  198. UIButtonConfiguration *btnConfig = [UIButtonConfiguration plainButtonConfiguration];
  199. NSString *iconName = config[@"icon"];
  200. UIImage *iconImage = [UIImage imageNamed:iconName];
  201. if (!iconImage) {
  202. UIImageSymbolConfiguration *symbolConfig = [UIImageSymbolConfiguration configurationWithPointSize:24 weight:UIFontWeightRegular];
  203. iconImage = [UIImage systemImageNamed:@"dollarsign.circle" withConfiguration:symbolConfig];
  204. } else {
  205. UIGraphicsBeginImageContextWithOptions(CGSizeMake(40, 40), NO, 0);
  206. [iconImage drawInRect:CGRectMake(0, 0, 40, 40)];
  207. iconImage = UIGraphicsGetImageFromCurrentImageContext();
  208. UIGraphicsEndImageContext();
  209. }
  210. btnConfig.image = iconImage;
  211. btnConfig.imagePlacement = NSDirectionalRectEdgeTop;
  212. btnConfig.imagePadding = 15;
  213. // 富文本吧
  214. NSAttributedString *titleAttr = [[NSAttributedString alloc] initWithString:config[@"text"] attributes:@{
  215. NSFontAttributeName: [UIFont systemFontOfSize:14],
  216. NSForegroundColorAttributeName: [UIColor whiteColor]
  217. }];
  218. btnConfig.attributedTitle = titleAttr;
  219. btnConfig.baseBackgroundColor = [UIColor clearColor];
  220. btnConfig.baseForegroundColor = [UIColor whiteColor];
  221. UIButton *btn = [UIButton buttonWithConfiguration:btnConfig primaryAction:nil];
  222. btn.translatesAutoresizingMaskIntoConstraints = NO;
  223. [btn addTarget:self action:@selector(infoButtonTapped:) forControlEvents:UIControlEventTouchUpInside];
  224. return btn;
  225. }
  226. - (void)infoButtonTapped:(UIButton *)sender {
  227. if (sender.tag == 100) {
  228. NSLog(@"金币按钮被点击");
  229. } else if (sender.tag == 101) {
  230. NSLog(@"钻石按钮被点击");
  231. }
  232. }
  233. - (UIView *)createVerticalDivider {
  234. UIView *divider = [[UIView alloc] init];
  235. divider.backgroundColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:1];
  236. divider.translatesAutoresizingMaskIntoConstraints = NO;
  237. return divider;
  238. }
  239. - (UIImageView *)createImageViewWithImage:(NSString *)imageName contentMode:(UIViewContentMode)mode cornerRadius:(CGFloat)radius {
  240. UIImageView *uiImageView = [[UIImageView alloc] init];
  241. uiImageView.image = [UIImage imageNamed:imageName];
  242. uiImageView.contentMode = mode;
  243. uiImageView.layer.cornerRadius = radius;
  244. uiImageView.clipsToBounds = YES;
  245. uiImageView.translatesAutoresizingMaskIntoConstraints = NO;
  246. return uiImageView;
  247. }
  248. - (UILabel *)createLabelWithText:(NSString *)text fontSize:(CGFloat)size textColor:(UIColor *)color {
  249. UILabel *label = [[UILabel alloc] init];
  250. label.text = text;
  251. label.font = [UIFont systemFontOfSize:size weight:UIFontWeightMedium];
  252. label.textColor = color;
  253. label.translatesAutoresizingMaskIntoConstraints = NO;
  254. return label;
  255. }
  256. - (UIButton *)createButtonWithTitle:(NSString *)title bgColor:(UIColor *)bgColor cornerRadius:(CGFloat)radius {
  257. UIButton *btn = [UIButton buttonWithType:UIButtonTypeSystem];
  258. [btn setTitle:title forState:UIControlStateNormal];
  259. [btn setTitleColor:[UIColor lightGrayColor] forState:UIControlStateNormal];
  260. btn.backgroundColor = bgColor;
  261. btn.layer.cornerRadius = radius;
  262. btn.translatesAutoresizingMaskIntoConstraints = NO;
  263. return btn;
  264. }
  265. - (UIView *)createDividerWithLeading:(CGFloat)leading {
  266. UIView *divider = [[UIView alloc] init];
  267. divider.backgroundColor = [UIColor colorWithRed:0.3 green:0.3 blue:0.3 alpha:1];
  268. divider.translatesAutoresizingMaskIntoConstraints = NO;
  269. return divider;
  270. }
  271. - (UIView *)createCommonRowWithText:(NSString *)text {
  272. UIView *rowView = [[UIView alloc] init];
  273. rowView.translatesAutoresizingMaskIntoConstraints = NO;
  274. rowView.backgroundColor = [UIColor clearColor];
  275. UIImageView *logoView = [self createImageViewWithImage:@"hqz"
  276. contentMode:UIViewContentModeScaleAspectFit
  277. cornerRadius:0];
  278. logoView.tintColor = [UIColor blueColor];
  279. [rowView addSubview:logoView];
  280. UILabel *textLabel = [self createLabelWithText:text
  281. fontSize:16
  282. textColor:[UIColor whiteColor]];
  283. [rowView addSubview:textLabel];
  284. UIButton *arrowBtn = [UIButton buttonWithType:UIButtonTypeSystem];
  285. [arrowBtn setImage:[UIImage systemImageNamed:@"chevron.right"] forState:UIControlStateNormal];
  286. [arrowBtn setTintColor:[UIColor lightGrayColor]];
  287. arrowBtn.translatesAutoresizingMaskIntoConstraints = NO;
  288. [rowView addSubview:arrowBtn];
  289. [NSLayoutConstraint activateConstraints:@[
  290. // logo左侧固定
  291. [logoView.centerYAnchor constraintEqualToAnchor:rowView.centerYAnchor],
  292. [logoView.leadingAnchor constraintEqualToAnchor:rowView.leadingAnchor constant:20],
  293. [logoView.widthAnchor constraintEqualToConstant:24],
  294. [logoView.heightAnchor constraintEqualToConstant:24],
  295. // 文字 logo右侧
  296. [textLabel.centerYAnchor constraintEqualToAnchor:logoView.centerYAnchor],
  297. [textLabel.leadingAnchor constraintEqualToAnchor:logoView.trailingAnchor constant:15],
  298. // 箭头 右侧固定
  299. [arrowBtn.centerYAnchor constraintEqualToAnchor:logoView.centerYAnchor],
  300. [arrowBtn.trailingAnchor constraintEqualToAnchor:rowView.trailingAnchor constant:-20]
  301. ]];
  302. return rowView;
  303. }
  304. #pragma mark - TabBar
  305. - (void) pushHome {
  306. HomeViewController *homeViewController = [[HomeViewController alloc] init];
  307. [self.navigationController pushViewController:homeViewController animated:YES];
  308. }
  309. - (void) pushQuotation {
  310. QuotationViewController *quotationViewController = [[QuotationViewController alloc] init];
  311. [self.navigationController pushViewController:quotationViewController animated:YES];
  312. }
  313. - (void)tabBarDidSelectIndex:(NSInteger)index {
  314. if (index == 3) {
  315. } else if (index == 0) {
  316. [self pushHome];
  317. } else if (index == 1) {
  318. [self pushQuotation];
  319. } else if (index == 2) {
  320. // 自选
  321. }
  322. }
  323. @end