312 lines
9.2 KiB
Objective-C
312 lines
9.2 KiB
Objective-C
//
|
||
// 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
|