diff --git a/YuMi.xcodeproj/project.pbxproj b/YuMi.xcodeproj/project.pbxproj index f2a1d21e..39575bf6 100644 --- a/YuMi.xcodeproj/project.pbxproj +++ b/YuMi.xcodeproj/project.pbxproj @@ -523,6 +523,8 @@ 541DD9552C1EDEFB00B616C4 /* XPHomePagingViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 541DD9542C1EDEFB00B616C4 /* XPHomePagingViewController.m */; }; 545888332C1AFFB500897585 /* XPRoomPKPanelView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888322C1AFFB500897585 /* XPRoomPKPanelView.m */; }; 545888362C1C306B00897585 /* XPRoomPKPaneAvatarView.m in Sources */ = {isa = PBXBuildFile; fileRef = 545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */; }; + 54C3895C2C215F5100FD47B1 /* XPHomeMineViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C3895B2C215F5100FD47B1 /* XPHomeMineViewController.m */; }; + 54C3895F2C2189DD00FD47B1 /* XPHomeMinePresenter.m in Sources */ = {isa = PBXBuildFile; fileRef = 54C3895E2C2189DD00FD47B1 /* XPHomeMinePresenter.m */; }; 73FFADDC93E195344047A2EC /* Pods_YuMi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CACF623970097D653132D69A /* Pods_YuMi.framework */; }; 9B0086C627BA392B0032BD2B /* AnchorStageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C527BA392B0032BD2B /* AnchorStageView.m */; }; 9B0086CA27BA4F570032BD2B /* AnchorMicroView.m in Sources */ = {isa = PBXBuildFile; fileRef = 9B0086C927BA4F570032BD2B /* AnchorMicroView.m */; }; @@ -2566,6 +2568,10 @@ 545888322C1AFFB500897585 /* XPRoomPKPanelView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPanelView.m; sourceTree = ""; }; 545888342C1C306B00897585 /* XPRoomPKPaneAvatarView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPRoomPKPaneAvatarView.h; sourceTree = ""; }; 545888352C1C306B00897585 /* XPRoomPKPaneAvatarView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPRoomPKPaneAvatarView.m; sourceTree = ""; }; + 54C3895A2C215F5100FD47B1 /* XPHomeMineViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeMineViewController.h; sourceTree = ""; }; + 54C3895B2C215F5100FD47B1 /* XPHomeMineViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomeMineViewController.m; sourceTree = ""; }; + 54C3895D2C2189DD00FD47B1 /* XPHomeMinePresenter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XPHomeMinePresenter.h; sourceTree = ""; }; + 54C3895E2C2189DD00FD47B1 /* XPHomeMinePresenter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = XPHomeMinePresenter.m; sourceTree = ""; }; 7DB00EC07F1D0ADFF900B38D /* Pods-YuMi.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-YuMi.debug.xcconfig"; path = "Target Support Files/Pods-YuMi/Pods-YuMi.debug.xcconfig"; sourceTree = ""; }; 9B0086C427BA392B0032BD2B /* AnchorStageView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AnchorStageView.h; sourceTree = ""; }; 9B0086C527BA392B0032BD2B /* AnchorStageView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AnchorStageView.m; sourceTree = ""; }; @@ -9424,6 +9430,8 @@ E87E62662A3F571C002F68C9 /* XPHomeContainerPresenter.m */, E87E62792A3F5A0D002F68C9 /* XPNewHomeRecommendPresenter.h */, E87E627A2A3F5A0D002F68C9 /* XPNewHomeRecommendPresenter.m */, + 54C3895D2C2189DD00FD47B1 /* XPHomeMinePresenter.h */, + 54C3895E2C2189DD00FD47B1 /* XPHomeMinePresenter.m */, ); path = Presenter; sourceTree = ""; @@ -9440,6 +9448,8 @@ E87E62582A3F560A002F68C9 /* XPHomeRecommendViewController.m */, E87E625B2A3F5622002F68C9 /* XPNewHomeViewController.h */, E87E625C2A3F5622002F68C9 /* XPNewHomeViewController.m */, + 54C3895A2C215F5100FD47B1 /* XPHomeMineViewController.h */, + 54C3895B2C215F5100FD47B1 /* XPHomeMineViewController.m */, 239BEED92AA1E058005CDA94 /* PIHoemCategoryTitleView.h */, 239BEEDA2AA1E058005CDA94 /* PIHoemCategoryTitleView.m */, 23B8D8DC2B860B8800CA472F /* PIHoemCategoryCollectionView.h */, @@ -11428,6 +11438,7 @@ 9BCB99A628F582EC00466D64 /* XPMineCollectRoomEditCell.m in Sources */, E8E70D7E26F2F19D00F03460 /* Api+Mine.m in Sources */, E85E7B3B2A4EB0D300B6D00A /* XPGuildSearchSuperAdminTableViewCell.m in Sources */, + 54C3895F2C2189DD00FD47B1 /* XPHomeMinePresenter.m in Sources */, E8751E6E28A64F990056EF44 /* XPSailingEmptyTableViewCell.m in Sources */, E87E625A2A3F560B002F68C9 /* XPHomeRecommendViewController.m in Sources */, E8950189282CFFB1007E459A /* XPMonentsLayoutConfig.m in Sources */, @@ -12061,6 +12072,7 @@ 236B2E432AA07D06003967A8 /* NSString+RW.m in Sources */, 239D0FC92C045F92002977CE /* MSRoomGameVC.m in Sources */, E85E7B172A4EB0D200B6D00A /* ClanMemberDetailInfoModel.m in Sources */, + 54C3895C2C215F5100FD47B1 /* XPHomeMineViewController.m in Sources */, 9B044DA0282D32F700DE4859 /* MicroInviteExtModel.m in Sources */, E8D7D74B282BA1EC0007D7BD /* XPMonentsTableViewCell.m in Sources */, E8D34D5A28082357009C4835 /* UserGiftWallInfoModel.m in Sources */, diff --git a/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.h b/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.h new file mode 100644 index 00000000..e8693e8c --- /dev/null +++ b/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.h @@ -0,0 +1,18 @@ +// +// XPHomeMinePresenter.h +// YuMi +// +// Created by P on 2024/6/18. +// + +#import "BaseMvpPresenter.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPHomeMinePresenter : BaseMvpPresenter + +//- (void)getMy + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.m b/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.m new file mode 100644 index 00000000..4ef1bc20 --- /dev/null +++ b/YuMi/Modules/YMNewHome/Presenter/XPHomeMinePresenter.m @@ -0,0 +1,12 @@ +// +// XPHomeMinePresenter.m +// YuMi +// +// Created by P on 2024/6/18. +// + +#import "XPHomeMinePresenter.h" + +@implementation XPHomeMinePresenter + +@end diff --git a/YuMi/Modules/YMNewHome/View/Cell/XPNewHomePartyCollectionViewCell.m b/YuMi/Modules/YMNewHome/View/Cell/XPNewHomePartyCollectionViewCell.m index d6ea0724..2b112ff7 100644 --- a/YuMi/Modules/YMNewHome/View/Cell/XPNewHomePartyCollectionViewCell.m +++ b/YuMi/Modules/YMNewHome/View/Cell/XPNewHomePartyCollectionViewCell.m @@ -100,10 +100,8 @@ make.trailing.mas_equalTo(-kGetScaleWidth(8)); make.bottom.mas_equalTo(-kGetScaleWidth(10)); make.height.mas_equalTo(kGetScaleWidth(17)); - }]; - - + [self.heatGifView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(kGetScaleWidth(14)); make.height.mas_equalTo(kGetScaleWidth(14)); @@ -121,7 +119,6 @@ make.leading.trailing.equalTo(self.nameView); make.height.mas_equalTo(kGetScaleWidth(17)); make.top.equalTo(self.nameView.mas_bottom).mas_offset(kGetScaleWidth(5)); - }]; [self.pkImageView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(kGetScaleWidth(23)); @@ -148,7 +145,6 @@ [self.tagavatarView mas_updateConstraints:^(MASConstraintMaker *make) { make.width.mas_equalTo(width); }]; - }]; _subView.text = _roomInfo.introduction; @@ -163,7 +159,6 @@ } } - for (int i = 0; i < 5; i++) { NetImageView *iconView = [self.contentView viewWithTag:100 + i]; if(i < _roomInfo.micUsers.count){ diff --git a/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.h b/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.h new file mode 100644 index 00000000..dc8a7408 --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.h @@ -0,0 +1,16 @@ +// +// XPHomeMineViewController.h +// YuMi +// +// Created by P on 2024/6/18. +// + +#import "MvpViewController.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface XPHomeMineViewController : MvpViewController + +@end + +NS_ASSUME_NONNULL_END diff --git a/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.m b/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.m new file mode 100644 index 00000000..25482d26 --- /dev/null +++ b/YuMi/Modules/YMNewHome/View/XPHomeMineViewController.m @@ -0,0 +1,32 @@ +// +// XPHomeMineViewController.m +// YuMi +// +// Created by P on 2024/6/18. +// + +#import "XPHomeMineViewController.h" + +#import "XPHomeMinePresenter.h" + +@interface XPHomeMineViewController () + + + +@end + +@implementation XPHomeMineViewController + +- (void)viewDidLoad { + [super viewDidLoad]; +} + +- (BOOL)isHiddenNavBar { + return YES; +} + +- (XPHomeMinePresenter *)createPresenter { + return [[XPHomeMinePresenter alloc] init]; +} + +@end diff --git a/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m b/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m index cf5ac74d..42c1d422 100644 --- a/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m +++ b/YuMi/Modules/YMNewHome/View/XPHomePagingViewController.m @@ -7,9 +7,22 @@ #import "XPHomePagingViewController.h" -@interface XPHomePagingViewController () +#import "XPNewHomeViewController.h" +#import "XPHomeMineViewController.h" +#import "XPRoomSearchContainerViewController.h" -@property (nonatomic, strong) UIPageViewController pageContainer; +@interface XPHomePagingViewController () + +@property (nonatomic, strong) UIView *topControlView; +@property (nonatomic, strong) UIButton *mineButton; +@property (nonatomic, strong) UIButton *recommendButton; + +@property (nonatomic, strong) UIPageViewController *pageContainer; +@property (nonatomic, strong) NSArray *viewControllers; // 存储子视图控制器的数组 +@property (nonatomic, assign) NSUInteger currentIndex; // 当前显示的页面索引 + +@property (nonatomic, strong) XPNewHomeViewController *recommendVC; +@property (nonatomic, strong) XPHomeMineViewController *mineVC; @end @@ -17,17 +30,151 @@ - (void)viewDidLoad { [super viewDidLoad]; - // Do any additional setup after loading the view. + + [self setup]; } -/* -#pragma mark - Navigation +- (void)setup { -// In a storyboard-based application, you will often want to do a little preparation before navigation -- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { - // Get the new view controller using [segue destinationViewController]. - // Pass the selected object to the new view controller. + self.view.backgroundColor = [DJDKMIMOMColor colorWithHexString:@"#F3F5FA"]; + + [self setupTopTheme]; + + [self setupTopControl]; + + _pageContainer = [[UIPageViewController alloc] initWithTransitionStyle:UIPageViewControllerTransitionStyleScroll + navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal + options:nil]; + _pageContainer.delegate = self; + _pageContainer.dataSource = self; + _recommendVC = [[XPNewHomeViewController alloc] init]; + _mineVC = [[XPHomeMineViewController alloc] init]; + _viewControllers = @[_mineVC, _recommendVC]; + [self didTapRecommendButton]; +// [self didTapMineButton]; + + [self addChildViewController:_pageContainer]; + [self.view addSubview:_pageContainer.view]; + + [self.pageContainer.view mas_makeConstraints:^(MASConstraintMaker *make) { + make.left.bottom.right.mas_equalTo(self.view); + make.top.mas_equalTo(self.topControlView.mas_bottom); + }]; + [self.pageContainer didMoveToParentViewController:self]; } -*/ +- (void)setupTopTheme { + UIImageView *theme = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, kGetScaleWidth(223))]; +// home_top_bg + theme.image = [UIImage imageNamed:@"home_top_bg"]; + theme.contentMode = UIViewContentModeScaleAspectFill; + [self.view addSubview:theme]; +} + +- (void)setupTopControl { + // TODO: 转为 StackView 来做 baseline 对齐 + _topControlView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, KScreenWidth, 44+52)]; + _topControlView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.4]; + [self.view addSubview:_topControlView]; + + _mineButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_mineButton setTitle:@"mine" forState:UIControlStateNormal]; + [_mineButton addTarget:self + action:@selector(didTapMineButton) + forControlEvents:UIControlEventTouchUpInside]; + [_topControlView addSubview:_mineButton]; + [_mineButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.mas_equalTo(self.topControlView).offset(-8); + make.left.mas_equalTo(self.topControlView).offset(8); + }]; + + _recommendButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [_recommendButton setTitle:@"recommend" forState:UIControlStateNormal]; + [_recommendButton addTarget:self + action:@selector(didTapRecommendButton) + forControlEvents:UIControlEventTouchUpInside]; + [_topControlView addSubview:_recommendButton]; + [_recommendButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.mas_equalTo(self.topControlView).offset(-8); + make.left.mas_equalTo(_mineButton.mas_right).offset(8); + }]; + + UIButton *searchButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [searchButton setTitle:@"搜索" forState:UIControlStateNormal]; + [searchButton addTarget:self + action:@selector(didTapSearchButton) + forControlEvents:UIControlEventTouchUpInside]; + [_topControlView addSubview:searchButton]; + [searchButton mas_makeConstraints:^(MASConstraintMaker *make) { + make.bottom.mas_equalTo(self.topControlView).offset(-8); + make.right.mas_equalTo(self.topControlView).offset(-8); + }]; +} + +- (void)displayMineTab { + [_mineButton.titleLabel setFont:[UIFont systemFontOfSize:21 weight:UIFontWeightBold]]; + [_recommendButton.titleLabel setFont:[UIFont systemFontOfSize:18 weight:UIFontWeightBold]]; + [_mineButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_recommendButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateNormal]; +} + +- (void)displayRecommendTab { + [_mineButton.titleLabel setFont:[UIFont systemFontOfSize:18 weight:UIFontWeightBold]]; + [_recommendButton.titleLabel setFont:[UIFont systemFontOfSize:21 weight:UIFontWeightBold]]; + [_recommendButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal]; + [_mineButton setTitleColor:[UIColor colorWithWhite:1 alpha:0.6] forState:UIControlStateNormal]; +} + +#pragma mark - +- (void)didTapMineButton { + [self.pageContainer setViewControllers:@[self.viewControllers[0]] + direction:UIPageViewControllerNavigationDirectionReverse + animated:NO + completion:nil]; + [self displayMineTab]; +} + +- (void)didTapRecommendButton { + [self.pageContainer setViewControllers:@[self.viewControllers[1]] + direction:UIPageViewControllerNavigationDirectionForward + animated:NO + completion:nil]; + [self displayRecommendTab]; +} + +- (void)didTapSearchButton { + XPRoomSearchContainerViewController * searchVC = [[XPRoomSearchContainerViewController alloc] init]; + searchVC.modalPresentationStyle = UIModalPresentationFullScreen; + [self.navigationController presentViewController:searchVC + animated:YES + completion:nil]; +} + +#pragma mark - UIPageViewController Delegate & DataSource +- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController { + NSUInteger index = [self.viewControllers indexOfObject:viewController]; + if (index > 0) { + return self.viewControllers[index - 1]; + } + return nil; +} + +- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { + NSUInteger index = [self.viewControllers indexOfObject:viewController]; + if (index < self.viewControllers.count - 1) { + return self.viewControllers[index + 1]; + } + return nil; +} + +#pragma mark - UIPageViewControllerDelegate +- (void)pageViewController:(UIPageViewController *)pageViewController willTransitionToViewControllers:(NSArray *)pendingViewControllers { + // 更新当前索引 + self.currentIndex = [self.viewControllers indexOfObject:pendingViewControllers.firstObject]; + if (self.currentIndex == 0) { + [self displayMineTab]; + } else { + [self displayRecommendTab]; + } +} @end diff --git a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m index c275fcf2..ea488f51 100644 --- a/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m +++ b/YuMi/Modules/YMNewHome/View/XPNewHomeViewController.m @@ -58,7 +58,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; @interface XPNewHomeViewController () ///背景 -@property (nonatomic,strong) UIImageView *backImageView; +//@property (nonatomic,strong) UIImageView *backImageView; ///导航 @property (nonatomic,strong) XPNewHomeNavView *navView; ///头视图 @@ -89,7 +89,7 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; } -(void)dealloc{ - [[NSNotificationCenter defaultCenter]removeObserver:self]; + [[NSNotificationCenter defaultCenter]removeObserver:self]; } - (BOOL)isHiddenNavBar { @@ -140,9 +140,9 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; - (void)initSubViews { self.type = 0; - self.view.backgroundColor = [DJDKMIMOMColor colorWithHexString:@"#F3F5FA"]; - [self.view addSubview:self.backImageView]; - [self.view addSubview:self.navView]; + self.view.backgroundColor = [UIColor clearColor]; +// [self.view addSubview:self.backImageView]; +// [self.view addSubview:self.navView]; [self.view addSubview:self.pagingView]; [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(openRoomNotification:) name:kOpenRoomNotification object:nil]; if([[AccountInfoStorage instance] getUid].length == 0){ @@ -231,18 +231,18 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; } } - (void)initSubViewConstraints { - [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.mas_equalTo(self.view); - make.height.mas_equalTo(kGetScaleWidth(223)); - }]; - - [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { - make.leading.trailing.top.mas_equalTo(self.view); - make.height.mas_equalTo(kNavigationHeight); - }]; +// [self.backImageView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.leading.trailing.top.mas_equalTo(self.view); +// make.height.mas_equalTo(kGetScaleWidth(223)); +// }]; +// +// [self.navView mas_makeConstraints:^(MASConstraintMaker *make) { +// make.leading.trailing.top.mas_equalTo(self.view); +// make.height.mas_equalTo(kNavigationHeight); +// }]; [self.pagingView mas_makeConstraints:^(MASConstraintMaker *make) { - make.top.equalTo(self.navView.mas_bottom).mas_offset(kGetScaleWidth(10)); + make.top.equalTo(self.view).mas_offset(kGetScaleWidth(10)); make.leading.bottom.trailing.mas_equalTo(0); }]; } @@ -558,15 +558,16 @@ UIKIT_EXTERN NSString * const kOpenRoomNotification; return _navView; } -- (UIImageView *)backImageView { - if (!_backImageView) { - _backImageView = [[UIImageView alloc] init]; - _backImageView.image = [UIImage imageNamed:@"home_top_bg"]; - _backImageView.layer.masksToBounds = YES; - _backImageView.contentMode = UIViewContentModeScaleAspectFill; - } - return _backImageView; -} +//- (UIImageView *)backImageView { +// if (!_backImageView) { +// _backImageView = [[UIImageView alloc] init]; +// _backImageView.image = [UIImage imageNamed:@"home_top_bg"]; +// _backImageView.layer.masksToBounds = YES; +// _backImageView.contentMode = UIViewContentModeScaleAspectFill; +// } +// return _backImageView; +//} + - (XPNewHomeHeadView *)headView{ if(!_headView){ _headView = [[XPNewHomeHeadView alloc]initWithFrame:CGRectZero];