123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466 |
- //
- // RDSHomeVC.m
- // Temperature
- //
- // Created by RD on 2022/10/24.
- //
- #import "RDSHomeVC.h"
- #import "RDSHomeTopView.h"
- #import "RDSHomeSceneView.h"
- #import "RDSHomeRoomView.h"
- #import "RDSRoomCell.h"
- #import "RDSAddRoomView.h"
- #import "RDSSelectDeviceMainVC.h"
- #import "RDSAirControlVC.h"
- #import "RDSSubControlVC.h"
- #import <MJRefresh/MJRefresh.h>
- #import "RDSMyInfoVC.h"
- #import "RDSSetPwdVC.h"
- #import "RDSMapHelper.h"
- #import "UIImageView+webImage.h"
- #import "WeatherModel.h"
- #import "RDSMemberModel.h"
- #import "RDSRoomModel.h"
- #import "GCDTimer.h"// 轮询定时器
- #import "RDSControlWebVC.h"
- static NSString * const RDSRoomCellID = @"RDSRoomCellID";
- @interface RDSHomeVC ()<UICollectionViewDelegate, UICollectionViewDataSource>
- @property (nonatomic, weak) UICollectionView *collectionView;
- @property (nonatomic, strong) UICollectionReusableView *footerView;
- @property (nonatomic, strong) UICollectionReusableView *headerView;
- @property (nonatomic, strong) RDSHomeTopView *topView;
- @property (nonatomic, strong) RDSHomeSceneView *sceneView;
- @property (nonatomic, strong) RDSAddRoomView *addView;
- @property (nonatomic, strong) GCDTimer *gcdTimer;// 定时轮询
- @end
- @implementation RDSHomeVC
- - (void)viewDidLoad {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
-
- // 隐藏导航栏
- self.fd_prefersNavigationBarHidden = YES;
-
-
- [self p_getCurrentUserInfo];
- // [self p_getHomeList];
- [self p_setUpTimer];// 初始化轮询
- [self p_setupCollectionView];
-
-
- [kNotificationCenter addObserver:self selector:@selector(p_refreshUserInfo)name:RDSUpdateUserInfoNotice object:nil];
-
- if(TheDataManager.isFirstLogin){
- RDSSetPwdVC *vc = [[RDSSetPwdVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self pushViewController:vc animated:YES];
- }
- }
- - (void)viewDidAppear:(BOOL)animated{
- [super viewDidAppear:animated];
-
- [_gcdTimer resumeTimer];// 开始轮询
- }
- - (void)viewDidDisappear:(BOOL)animated{
- [super viewDidDisappear:animated];
-
- [_gcdTimer pauseTimer];// 暂停轮询
- }
- - (void)p_getCurrentUserInfo{
- RDS_WEAKSELF(weakSelf)
- [RDSUserInfoModel rds_getCurrentUserInfoFinished:^(NSError *error) {
- if (!error) {
- [weakSelf p_refreshUserInfo];
- [weakSelf p_getHomeDetail];
- [weakSelf p_getWeather];
- [weakSelf p_getWelcomeMessage];
- }
- }];
- }
- //- (void)p_getHomeList {
- // [RDSHomeModel rds_getHomeListIsAdmin:NO finished:nil];
- //}
- - (void)p_getWeather{
- RDS_WEAKSELF(weakSelf)
- [WeatherModel rds_getWeatherFinished:^(WeatherModel * _Nonnull weather, NSError * _Nonnull error) {
- weakSelf.topView.model = weather;
- }];
- }
- - (void)p_getWelcomeMessage {
- RDS_WEAKSELF(weakSelf)
- [RDSSystemParameterModel rds_getWelcomeMessageFinished:^(RDSSystemParameterModel * _Nullable systemParameter, NSError * _Nullable error) {
- weakSelf.topView.systemParameter = systemParameter;
- }];
- }
- // 弃用
- - (void)p_getRoomList{
- RDS_WEAKSELF(weakSelf)
- [RDSRoomModel rds_getRoomListFinished:^(NSError * _Nonnull error) {
-
- weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
-
- [weakSelf.collectionView.mj_header endRefreshing];
- [weakSelf.collectionView reloadData];
- }];
- }
- - (void)p_getHomeDetail{
-
- RDS_WEAKSELF(weakSelf)
- [RDSHomeModel rds_getHomeDetailWithHomeId:TheDataManager.current_home_id finished:^(RDSHomeModel *home, NSError *error) {
- weakSelf.addView.hidden = (BOOL)TheDataManager.rooms.count;
-
- if(kNULLString(home.city)){
- [weakSelf p_userLocation];
- }
-
- [weakSelf.collectionView.mj_header endRefreshing];
- [weakSelf.collectionView reloadData];
- }];
- }
- - (void)p_userLocation{
- RDS_WEAKSELF(weakSelf)
- [TheMapHelper rds_startLocationSevice:^(RDSUserLocation *userLocation) {
- [weakSelf p_updateLocation];
- }];
- }
- - (void)p_updateLocation{
- RDS_WEAKSELF(weakSelf)
- if(kNULLString(TheMapHelper.userLocation.cityString)){
- return;
- }
-
- [RDSDemoApiHelper rds_updateHomeInfoWithHomeId:TheDataManager.current_home_id name:TheDataManager.current_home_name city:TheMapHelper.userLocation.cityString success:^(id responseObject) {
- if ([responseObject[@"code"] intValue] == 0) {
- DDLog(@"更新城市成功");
-
- [weakSelf p_getWeather];
- } else{
- DDLog(@"更新城市失败:%@",responseObject[@"message"]);
- }
- } failure:^(NSError *error) {
-
- }];
- }
- - (void)p_refreshUserInfo{
-
- RDS_WEAKSELF(weakSelf)
-
- weakSelf.topView.title = [NSString stringWithFormat:@"欢迎回来,%@!",TheDataManager.currentUser.user_name];
-
- if (!TheDataManager.currentUser.headImg) {
- [TheDataManager.currentUser rds_getHeadImgFinished:^(NSError *error) {
- [weakSelf.topView.headBtn setImage:TheDataManager.currentUser.headImg forState:UIControlStateNormal];
- }];
- }else{
- [weakSelf.topView.headBtn setImage:TheDataManager.currentUser.headImg forState:UIControlStateNormal];
- }
-
- }
- // 定时轮询
- - (void)p_setUpTimer{
-
- self.gcdTimer = [[GCDTimer alloc] init];
- RDS_WEAKSELF(weakSelf)
- [_gcdTimer scheduledTimerWithTimeInterval:3 afterTime:3 repeats:YES block:^{
- [weakSelf p_getHomeDetail];
- }];
- }
- #pragma mark - UI
- // 顶部视图
- - (void)p_setupTopView{
-
- // 375 217.5
- CGFloat viewH = 206;//kSCALE_WIDTH_6*222;
- RDSHomeTopView *view = [RDSHomeTopView rds_loadViewFromNib];
- view.frame = CGRectMake(0, 0, SCREEN_WIDTH, viewH);
- [self.footerView addSubview:view];
- [view mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.footerView);
- make.height.equalTo(@(viewH));
- make.left.equalTo(self.footerView);
- make.right.equalTo(self.footerView);
- }];
- self.topView = view;
- RDS_WEAKSELF(weakSelf)
- view.onHeadClick = ^{
- RDSMyInfoVC *vc = [[RDSMyInfoVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [weakSelf pushViewController:vc animated:YES];
- };
-
-
-
- }
- // 场景先不做
- - (void)p_setupSceneView{
-
- RDSHomeSceneView *scenesView = [[RDSHomeSceneView alloc] init];
- [self.footerView addSubview:scenesView];
- self.sceneView = scenesView;
- //scenesView.delegate = self;
- [scenesView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.topView.mas_bottom).offset(10);
- make.height.equalTo(@90);
- make.left.equalTo(self.footerView);//.offset(10);
- make.right.equalTo(self.footerView);//.offset(-10);
- }];
-
- NSArray *scenes = @[@1,@2,@3,@4,@5,@6];
- scenesView.scenes = scenes;
- }
- - (RDSAddRoomView *)addView{
- if(_addView == nil){
- _addView = [RDSAddRoomView rds_loadViewFromNib];
- _addView.hidden = YES;
- [self.collectionView addSubview:_addView];
- [_addView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.view);//.offset(20);
- make.right.equalTo(self.view);//.offset(-20);
- make.height.equalTo(@300);
- make.top.equalTo(@(SCREEN_HEIGHT*0.4));
- }];
-
- RDS_WEAKSELF(weakSelf)
- _addView.onAddClick = ^{
- RDSSelectDeviceMainVC *vc = [[RDSSelectDeviceMainVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [weakSelf pushViewController:vc animated:YES];
-
- };
- }
- return _addView;
- }
- - (void)p_setupCollectionView {
-
- UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc] init];
- CGFloat viewW = SCREEN_WIDTH - 16 * 2;
- layout.itemSize = CGSizeMake(viewW, 80);
- layout.minimumLineSpacing = 8;
- layout.sectionInset = UIEdgeInsetsMake(0, 16, 16, 16);
- layout.scrollDirection = UICollectionViewScrollDirectionVertical;
- layout.sectionHeadersPinToVisibleBounds = YES;
-
- UICollectionView *collectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:layout];
- collectionView.showsHorizontalScrollIndicator = NO;
- collectionView.showsVerticalScrollIndicator = NO;
- collectionView.backgroundColor = RDSViewBgColor;
- [collectionView registerClass:[RDSRoomCell class] forCellWithReuseIdentifier:RDSRoomCellID];
- collectionView.delegate = self;
- collectionView.dataSource = self;
- collectionView.pagingEnabled = NO;
- [self.view addSubview:collectionView];
- self.collectionView = collectionView;
- [collectionView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.view);//.offset(20);
- make.right.equalTo(self.view);//.offset(-20);
- make.bottom.equalTo(self.view.mas_bottom);
- if (@available(iOS 11.0, *)) {
- make.top.equalTo(self.view.mas_safeAreaLayoutGuideTop);
- // make.bottom.equalTo(self.view.mas_safeAreaLayoutGuideBottom);
- } else {
- make.top.equalTo(self.view);
- }
- }];
-
-
- //注册行头
- // [self.collectView registerNib:[UINib nibWithNibName:@"NibName" bundle:nil] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"ReuseIdentifier"];
- //或者
- [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header"];
-
- [self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"Footer"];
-
- MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(p_getCurrentUserInfo)];
- header.automaticallyChangeAlpha = YES;
- header.lastUpdatedTimeLabel.hidden = YES;
- self.collectionView.mj_header = header;
-
- // UILongPressGestureRecognizer *longPress = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(p_longPressMethod:)];
- // longPress.minimumPressDuration = 0.3f;
- // [collectionView addGestureRecognizer:longPress];
- }
- #pragma mark - UICollectionViewDelegate
- - (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
-
- [collectionView deselectItemAtIndexPath:indexPath animated:YES];
-
- RDSRoomModel *roomModel = TheDataManager.rooms[indexPath.row];
- switch (roomModel.deviceType) {
- case RDSDeviceType_MasterController: {
- RDSAirControlVC *vc = [[RDSAirControlVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- vc.roomModel = roomModel;
- [self pushViewController:vc animated:YES];
- break;
- }
- case RDSDeviceType_SubController: {
- RDSSubControlVC *vc = [[RDSSubControlVC alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- vc.roomModel = roomModel;
- [self pushViewController:vc animated:YES];
- break;
- }
- default:{
- RDSControlWebVC *vc = [[RDSControlWebVC alloc] initWithRecordId:roomModel.record_id code:roomModel.code];
- [self pushViewController:vc animated:YES];
- }
- }
-
-
- }
- #pragma mark - UICollectionViewDataSource
- - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
-
- return 2;
- }
- - (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
-
- if(section == 0){// 第一组用来做悬停顶部视图
- return 0;
- }
- return TheDataManager.rooms.count;
- }
- - (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
-
- RDSRoomCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:RDSRoomCellID forIndexPath:indexPath];
-
- RDSRoomModel *model;
- if(TheDataManager.rooms.count > indexPath.row){
- model = TheDataManager.rooms[indexPath.row];
- }
- cell.model = model;
-
- cell.onPowerClick = ^(BOOL onOff) {
- // 开关
-
- if(model.is_master){
- [RDSDemoApiHelper rds_setPower:onOff control_number:model.control_number success:^(id responseObject) {
- if ([responseObject[@"code"] intValue] != 0) {
- [RDSHudShower showBottomToast:responseObject[@"message"]];
- }
- } failure:^(NSError *error) {
- [RDSHudShower showBottomToast:@"连接服务器失败"];
- }];
- }
- else{
- [RDSDemoApiHelper rds_setSubDevPower:onOff control_number:model.control_number success:^(id responseObject) {
- if ([responseObject[@"code"] intValue] != 0) {
- [RDSHudShower showBottomToast:responseObject[@"message"]];
- }
- } failure:^(NSError *error) {
- [RDSHudShower showBottomToast:@"连接服务器失败"];
- }];
- }
- };
-
- return cell;
- }
- // 不允许高亮
- - (void)collectionView:(UICollectionView *)collectionView didHighlightItemAtIndexPath:(NSIndexPath *)indexPath{
-
- RDSRoomCell *cell = (RDSRoomCell*)[self.collectionView cellForItemAtIndexPath:indexPath];
- cell.highlighted = NO;
- }
- // 设置header尺寸
- - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
-
- if(section == 0){
- return CGSizeZero;
- }
-
- return CGSizeMake(SCREEN_WIDTH, 50);
- }
- // 设置footer尺寸
- - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section{
-
- if(section == 0){
- return CGSizeMake(SCREEN_WIDTH, 306-60-30);// -60是场景的高度,场景先不做
- }
-
- return CGSizeZero;
- }
- //sectionheader
- - (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
-
- if (kind == UICollectionElementKindSectionFooter) {
- UICollectionReusableView *footerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"Footer" forIndexPath:indexPath];
- footerView.backgroundColor = UIColor.clearColor;
- if(self.topView == nil){
- self.footerView = footerView;
- [self p_setupTopView];
- //[self p_setupSceneView]; //先不做场景功能
- }
- return footerView;
- }
-
- UICollectionReusableView *headView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:@"Header" forIndexPath:indexPath];
- headView.backgroundColor = RDSViewBgColor;
-
- UILabel *title = [[UILabel alloc] initWithFrame:CGRectMake(20, 10, 100, 20)];
- title.text = @"我的房间";
- title.font = [UIFont boldSystemFontOfSize:18];
- [headView addSubview:title];
-
- return headView;
- }
- - (void)dealloc{
- DDLog(@"dealloc~~");
- [_gcdTimer stopTimer];// 取消轮询
- [kNotificationCenter removeObserver:self];
- }
- @end
|