Files
peko-ios/YuMi/Modules/YMNewHome/View/XPHomeSloganViewController.m
2024-04-11 17:05:27 +08:00

312 lines
9.2 KiB
Objective-C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// YMHomeSloganViewController.m
// YUMI
//
// Created by XY on 2023/2/17.
//
#import "XPHomeSloganViewController.h"
#import "XPHomeUserView.h"
#import "YUMIMacroUitls.h"
#import "DJDKMIMOMColor.h"
#import "NetImageView.h"
#import <Masonry.h>
#import "XPWeakTimer.h"
#import "AccountInfoStorage.h"
#import "Api+Home.h"
///M
#import "HomeRecommendRoomModel.h"
///VC
#import "XPRoomViewController.h"
#import "XPMineSimpleUserInfoViewController.h"
@interface XPHomeSloganViewController ()<XPHomeUserViewDelegate> {
NSTimer * timer;
}
/// 用户视图数组
@property (nonatomic, strong) NSMutableArray<XPHomeUserView *> *userViewArr;
/// 背景图
@property (nonatomic, strong) NetImageView *bgImageView;
/// MoliStar圈
@property (nonatomic, strong) UIImageView *nameImageView;
@property (nonatomic, strong) UIButton *enterRoomBtn;
///个人房列表数据
@property (nonatomic,strong) NSMutableArray<HomeRecommendRoomModel *> *hotRoomList;
@end
@implementation XPHomeSloganViewController
//- (XPHomeRecommendPresenter *)createPresenter {
// return [[XPHomeRecommendPresenter alloc] init];
//}
- (BOOL)isHiddenNavBar {
return YES;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self createUI];
[self addTimer];
[self loadRecommend];
}
- (void)loadRecommend {
NSString * uid = [AccountInfoStorage instance].getUid;
NSString * pageStr = [NSString stringWithFormat:@"%d", 1];
NSString * pageSizeStr = [NSString stringWithFormat:@"%d", 10];
[Api getRecommendListComplection:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
if (code == 200) {
NSArray * array = [HomeRecommendRoomModel modelsWithArray:data.data];
[self getHomeRecommendRoomListSuccess:array];
} else {
}
} uid:uid tabId:@"" pageNum:pageStr pageSize:pageSizeStr];
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
if (timer) {
[timer setFireDate:[NSDate distantPast]]; //很远的过去
}
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (timer) {
//关闭定时器
[timer setFireDate:[NSDate distantFuture]]; //很远的将来
}
}
- (void)createUI {
[self.view addSubview:self.bgImageView];
[self.view addSubview:self.nameImageView];
[self.view addSubview:self.enterRoomBtn];
[self.bgImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.edges.mas_equalTo(self.view);
}];
[self.nameImageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.mas_equalTo(kStatusBarHeight+20);
make.leading.mas_equalTo(23);
make.width.mas_equalTo(100);
make.height.mas_equalTo(45);
}];
[self.enterRoomBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.width.mas_equalTo(30);
make.height.mas_equalTo(40);
make.centerY.mas_equalTo(self.nameImageView);
make.trailing.mas_equalTo(self.view).offset(-15);
}];
}
- (void)addTimer {
timer = [XPWeakTimer scheduledTimerWithTimeInterval:15 block:^(id userInfo) {
[self loadRecommend];
} userInfo:nil repeats:YES];
}
#pragma mark - XPHomeUserViewDelegate
- (void)userViewClickAction:(HomeRecommendRoomModel *)model {
if (model.roomUid.length > 0) {
// [XPRoomViewController openRoom:model.uid fromNick:nil fromType:UserEnterRoomFromType_Home_Recommend fromUid:nil viewController:self];
XPMineSimpleUserInfoViewController *infoVC = [[XPMineSimpleUserInfoViewController alloc] init];
infoVC.uid = [model.roomUid integerValue];
[self.navigationController pushViewController:infoVC animated:YES];
}
}
#pragma mark - XPHomeRecommendProtocol
- (void)getHomeRecommendRoomListSuccess:(NSArray *)list {
if (list.count > 10) {
list = [list subarrayWithRange:NSMakeRange(0, 9)];
}
[self.hotRoomList removeAllObjects];
[self.hotRoomList addObjectsFromArray:list];
// 二次添加
if (self.userViewArr.count > 0) {
[self removeUserViews];
return;
}
// 首次添加
for (HomeRecommendRoomModel *model in self.hotRoomList) {
XPHomeUserView *userView = [self showUserView:model];
if(userView != nil) {
[self.userViewArr addObject:userView];
}
}
}
- (void)getHomeRecommendDataFail {
}
/// 添加用户视图
- (XPHomeUserView *)showUserView:(HomeRecommendRoomModel *)model {
// 随机坐标
CGFloat scale = (arc4random_uniform(50)+1)*0.01 + 0.5;
CGRect rect = [self getRandomRect];
CGRect scaleRect = rect;
scaleRect.size.width = rect.size.width * scale;
scaleRect.size.height = rect.size.height * scale;
// 确保不重叠
NSInteger count = 0; //循环超过1000次强制退出
BOOL contain = [self intersectsRect:scaleRect];
while (contain || count < 1000) {
scale = (arc4random_uniform(50)+1)*0.01 + 0.5;
rect = [self getRandomRect];
scaleRect = rect;
scaleRect.size.width = rect.size.width * scale;
scaleRect.size.height = rect.size.height * scale;
contain = [self intersectsRect:scaleRect];
count++;
}
//循环1000次还重叠就放弃添加防止死循环
if (contain == YES) {
return nil;
}
// 添加
XPHomeUserView *userView = [[XPHomeUserView alloc] init];
userView.frame = rect;
userView.transform = CGAffineTransformMakeScale(scale, scale);
userView.frame = scaleRect;
userView.delegate = self;
[self.view addSubview:userView];
userView.roomModel = model;
// 动画出现
userView.alpha = 0;
[UIView animateWithDuration:0.5 animations:^{
userView.alpha = 1;
} completion:^(BOOL finished) {
}];
return userView;
}
- (void)removeUserViews {
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_main_queue();
NSUInteger viewCount = self.userViewArr.count;
for (int i = 0; i< viewCount; i++) {
dispatch_group_enter(group);
XPHomeUserView *userView = self.userViewArr[i];
[UIView animateWithDuration:0.5 animations:^{
userView.alpha = 0;
userView.transform = CGAffineTransformMakeScale(0.01, 0.01);
} completion:^(BOOL finished) {
[userView removeFromSuperview];
[self.userViewArr removeObject:userView];
dispatch_group_leave(group);
}];
}
dispatch_group_notify(group, queue, ^{
for (HomeRecommendRoomModel *model in self.hotRoomList) {
XPHomeUserView *userView = [self showUserView:model];
if (userView !=nil) {
[self.userViewArr addObject:userView];
}
}
});
}
/// 获取随机坐标
- (CGRect)getRandomRect {
@autoreleasepool {
// 用户视图原始大小
CGFloat userViewWidth = 120;
CGFloat userViewHeight = 120;
CGFloat statusBarHeight = kStatusBarHeight;
// 限定随机区域
CGFloat areaWidth = self.view.bounds.size.width - userViewWidth - 5*2;
CGFloat areaHeight = self.view.bounds.size.height - statusBarHeight - 70 - 90- userViewHeight;
CGFloat x = arc4random_uniform(areaWidth)+5;
CGFloat y = arc4random_uniform(areaHeight)+statusBarHeight+ 70;
CGRect rect = CGRectMake(x, y, userViewWidth, userViewHeight);
return rect;
}
}
/// 判断新生成的坐标是否和已添加的用户视图坐标重叠
/// - Parameter targetRect: 目标坐标
- (BOOL)intersectsRect:(CGRect)targetRect {
@autoreleasepool {
for (XPHomeUserView *userView in self.userViewArr) {
CGRect frame = userView.frame;
BOOL b = CGRectIntersectsRect(targetRect, frame);
if (b) {
return YES;
}
}
return NO;
}
}
- (void)likeButtonAction:(UIButton *)sender {
NSString* roomUid = [AccountInfoStorage instance].getUid;
[XPRoomViewController openRoom:roomUid viewController:self];
}
#pragma mark - 懒加载
- (NSMutableArray<XPHomeUserView *> *)userViewArr {
if (!_userViewArr) {
_userViewArr = [NSMutableArray array];
}
return _userViewArr;
}
- (NSMutableArray<HomeRecommendRoomModel *> *)hotRoomList {
if (!_hotRoomList) {
_hotRoomList = [NSMutableArray array];
}
return _hotRoomList;
}
- (NetImageView *)bgImageView {
if (!_bgImageView) {
_bgImageView = [[NetImageView alloc] init];
_bgImageView.contentMode = UIViewContentModeScaleAspectFill;
_bgImageView.image = [UIImage imageNamed:@"home_bg"];
}
return _bgImageView;
}
- (UIImageView *)nameImageView {
if (!_nameImageView) {
_nameImageView = [[UIImageView alloc] init];
_nameImageView.contentMode = UIViewContentModeScaleAspectFit;
_nameImageView.image = [UIImage imageNamed:@"home_name"];
}
return _nameImageView;
}
- (UIButton *)enterRoomBtn {
if (!_enterRoomBtn) {
_enterRoomBtn = [UIButton buttonWithType:UIButtonTypeCustom];
[_enterRoomBtn setImage:[UIImage imageNamed:@"home_nav_open_room"] forState:UIControlStateNormal];
[_enterRoomBtn setImage:[UIImage imageNamed:@"home_nav_open_room"] forState:UIControlStateSelected];
[_enterRoomBtn addTarget:self action:@selector(likeButtonAction:) forControlEvents:UIControlEventTouchUpInside];
}
return _enterRoomBtn;
}
@end