| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531 |
- //
- // HJHomeViewController.m
- // HappyJob
- //
- // Created by Bob on 2019/3/13.
- // Copyright © 2019 Bob. All rights reserved.
- //
- #import "HJHomeViewController.h"
- #import "HJNavBarView.h"
- #import "HJHomeHeaderView.h"
- #import "HJStartAgreementView.h"//协议view
- #import "HJSearchViewController.h"//搜索
- #import "HJCityPickerViewController.h"//定位
- #import "HJFullTimeViewController.h"//全职
- #import "HJPartTimeViewController.h"//兼职
- #import "HJRewardViewController.h"//入职奖励
- #import "HJFatSalaryViewController.h"//高薪急聘
- #import "HJBenefitViewController.h"//福利岗位
- #import "HJAgentViewController.h"//全民经纪人
- #import <AMapLocationKit/AMapLocationKit.h>
- #import "HJLoginUserAgreementViewController.h"
- #import "HJCityPickerCity.h"
- #import "HJUpdateViewController.h"//更新
- #import "HJWebViewController.h"
- #import "HJHomeDataBox.h"
- #import "HJPositionDataBox.h"
- #import "HJCheckVersionAPIManager.h"
- #import "HJGetHotPositionAPIManager.h"
- #import "HJGetDynamicBannerAPIManager.h"
- @interface HJHomeViewController ()
- <
- UITableViewDelegate,
- HJNavBarViewDelegate,
- HJJobSortViewDelegate,
- HJBannerScrollViewDelegate,
- FBAPIManagerDelegate,
- FBAPIManagerInterceptor,
- HJPageListViewDelegate
- >
- @property (nonatomic, strong) HJNavBarView *navBarView;//导航栏
- @property (nonatomic, strong) HJPageListView *pageListView;//tableview
- @property (nonatomic, strong) HJHomeHeaderView *headerView;//(轮播,六个模块)头部视图
- @property (nonatomic, strong) HJGetHotPositionAPIManager *getHotPositionAPIManager;
- @property (nonatomic, strong) HJGetDynamicBannerAPIManager *getBannerAPIManager;
- @property (nonatomic, strong) HJPositionDataBox *positionDataBox;
- @property (nonatomic, strong) HJHomeDataBox *homeDataBox;
- @property (nonatomic, strong) AMapLocationManager *locationManager;//高德定位
- @property (nonatomic, strong) HJCheckVersionAPIManager *checkAPIManager;//版本更新
- @property (nonatomic, strong) UIButton *customerServiceBtn;//客服按钮,
- @end
- @implementation HJHomeViewController
- #pragma mark - life cycle
- - (void)dealloc {
-
- [[NSNotificationCenter defaultCenter] removeObserver:self name:HJCityPickerCitySelectedNotification object:nil];
- }
- - (void)viewWillAppear:(BOOL)animated {
-
- [super viewWillAppear:animated];
- [self.navigationController setNavigationBarHidden:YES animated:animated];
- }
- - (void)viewDidLoad {
-
- NSLog(@"ceshi");
- [super viewDidLoad];
- NAVI_BACK_TITLE;
- [self hj_setupNavBar];
- [self makeConstraints];
-
- //检查更新,
- self.checkAPIManager.version = APP_VERSION;
- [self.checkAPIManager start];
-
- // 调用banner图片URL,
- [self.getBannerAPIManager start];
-
- //定位,
- [self positioningCity];
-
- //添加城市选择通知,
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(cityPickerViewSelectCity:) name:HJCityPickerCitySelectedNotification object:nil];
-
- //协议政策,
- if (![[HJAppUserType sharedInstance].firstStart boolValue])
- {
- [self showAgreement];
- }
- }
- - (void)makeConstraints {
-
- // 添加列表视图
- [self.view addSubview:self.navBarView];
- [self.view insertSubview:self.pageListView belowSubview:self.navBarView];
- [self.view addSubview:self.customerServiceBtn];
- [self.navBarView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.left.right.equalTo(self.view);
- make.top.equalTo(self.view.mas_top).offset(0);
- make.height.mas_equalTo(STATUS_BAR_H + 44);
- }];
-
- [self.pageListView mas_makeConstraints:^(MASConstraintMaker *make) {
- make.top.equalTo(self.navBarView.mas_bottom).offset(0);
- make.left.right.bottom.equalTo(self.view).offset(0);
- }];
- [self.headerView mas_makeConstraints:^(MASConstraintMaker *make) {
- // 注意要加top
- make.top.width.equalTo(self.pageListView.tableView);
- }];
- [self.customerServiceBtn mas_makeConstraints:^(MASConstraintMaker *make) {
-
- make.right.equalTo(self.view.mas_right).offset(-10);
- make.bottom.equalTo(self.view.mas_bottom).offset(-15);
- }];
- }
- /* 设置状态栏为白色 */
- - (UIStatusBarStyle)preferredStatusBarStyle{
- return UIStatusBarStyleLightContent;//白色
- }
- /* 第一次启动显示协议 */
- - (void)showAgreement {
-
- HJStartAgreementView *agreementView = [[HJStartAgreementView alloc] init];
- [self.view addSubview:agreementView];
- agreementView.readAgreementBlock = ^(NSInteger flag) {
-
- HJLoginUserAgreementViewController *userAgreementViewController = [[HJLoginUserAgreementViewController alloc]init];
- userAgreementViewController.type = flag;
- userAgreementViewController.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:userAgreementViewController animated:YES];
- };
- }
- /* 定位 */
- - (void)positioningCity {
-
- HJCityPickerCity *locCity = [HJCityPickerCity locationCity];
- if (locCity == nil)
- {
- [self.locationManager requestLocationWithReGeocode:YES completionBlock:^(CLLocation *location, AMapLocationReGeocode *regeocode, NSError *error) {
-
- if (error == nil && regeocode)
- {
- HJCityPickerCity *city = [HJCityPickerCity modelFromAdcode:regeocode.adcode];
- [HJCityPickerCity setLocationCity:city];
- }
- else
- {
- self.navBarView.city = @"全国";
- // 调用热门岗位API
- [self.getHotPositionAPIManager start];
- }
- }];
- }
- else
- {
- self.navBarView.city = locCity.name;
- self.getHotPositionAPIManager.cityCode = locCity.adcode;
- // 调用热门岗位API
- [self.getHotPositionAPIManager start];
- }
- }
- #pragma mark - UITableViewDelegate
- - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-
- [tableView deselectRowAtIndexPath:indexPath animated:YES];
- UIViewController *vc = [self.positionDataBox positionDetailViewControllerAtIndexPath:indexPath];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- #pragma mark - HJNavBarViewDelegate
- /* 城市选择 */
- - (void)navBarViewCityButtonClicked:(HJNavBarView *)navBarView {
-
- HJCityPickerViewController *cityViewController = [[HJCityPickerViewController alloc] init];
- cityViewController.modalPresentationStyle = UIModalPresentationFullScreen;
- [self presentViewController:cityViewController animated:YES completion:nil];
- }
- /* 搜索 */
- - (void)navBarViewSearchButtonClicked:(HJNavBarView *)navBarView {
- // 先用导航控制器包一层,不然在搜索页面push视图的时候会失效
- HJSearchViewController *searchViewController = [[HJSearchViewController alloc] init];
- UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:searchViewController];
- nav.modalPresentationStyle = UIModalPresentationFullScreen;
- [self presentViewController:nav animated:YES completion:nil];
- }
- #pragma mark - HJJobSortViewDelegate
- /* 全职 */
- - (void)jobSortViewFullTimeButtonClicked:(HJJobSortView *)jobSortView {
-
- HJFullTimeViewController *vc = [[HJFullTimeViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 兼职 */
- - (void)jobSortViewPartTimeButtonClicked:(HJJobSortView *)jobSortView {
-
- HJPartTimeViewController *vc = [[HJPartTimeViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 入职奖励 */
- - (void)jobSortViewRewardButtonClicked:(HJJobSortView *)jobSortView {
-
- HJRewardViewController *vc = [[HJRewardViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 高薪急聘 */
- - (void)jobSortViewFatSalaryButtonClicked:(HJJobSortView *)jobSortView {
-
- HJFatSalaryViewController *vc = [[HJFatSalaryViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 福利岗位 */
- - (void)jobSortViewBenefitButtonClicked:(HJJobSortView *)jobSortView {
-
- HJBenefitViewController *vc = [[HJBenefitViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 全民经纪人 */
- - (void)jobSortViewAgentButtonClicked:(HJJobSortView *)jobSortView {
-
- HJAgentViewController *vc = [[HJAgentViewController alloc] init];
- vc.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:vc animated:YES];
- }
- /* 客服 */
- - (void)customerServiceClick:(UIButton *)btn {
-
- HJWebViewController *webView = [[HJWebViewController alloc] init];
- webView.titleStr = @"客服";
- webView.webUrl = kCustomerServiceURL;
- webView.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:webView animated:YES];
- }
- /* 平移手势 */
- - (void)pan:(UIPanGestureRecognizer *)pan{
-
- UIButton * imageV = (UIButton *)pan.view ;
- CGPoint point = [pan translationInView:imageV] ;
- pan.view.transform = CGAffineTransformTranslate(pan.view.transform, point.x, point.y);
- [pan setTranslation:CGPointZero inView:pan.view];
- }
- #pragma mark - HJBannerScrollViewDelegate
- - (void)bannerScrollView:(HJBannerScrollView *)banner gotoPositionDetailWithID:(NSUInteger)pId type:(NSUInteger)pType {
-
- UIViewController *detailVC = [self.positionDataBox positionDetailViewControllerWithPositionID:pId positionType:pType];
- detailVC.hidesBottomBarWhenPushed = YES;
- [self.navigationController pushViewController:detailVC animated:YES];
- }
- - (void)bannerScrollView:(HJBannerScrollView *)banner gotoDetailWithURLString:(NSString *)URLString linkFlag:(NSInteger)linkFlag title:(nonnull NSString *)title {
- if (linkFlag == 1)
- {//外链
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:URLString]];
- }
- if (linkFlag == 0)
- {//内链
- HJWebViewController *webView = [[HJWebViewController alloc]init];
- webView.hidesBottomBarWhenPushed = YES;
- webView.titleStr = title;
- webView.webUrl = URLString;
- [self.navigationController pushViewController:webView animated:YES];
- }
- }
- #pragma mark - FBAPIManagerInterceptor
- - (BOOL)manager:(FBBaseAPIManager *)manager shouldStartCallAPIWithParams:(NSDictionary *)params {
-
- if (manager == self.getHotPositionAPIManager)
- {
- return [self.pageListView manager:manager shouldStartCallAPIWithParams:params];
- }
- return YES;
- }
- - (void)managerShouldFinishCallAPI:(FBBaseAPIManager *)manager {
-
- if (manager == self.getHotPositionAPIManager)
- {
- [self.pageListView managerShouldFinishCallAPI:manager];
- }
- }
- #pragma mark - FBAPIManagerDelegate
- - (void)managerCallAPIDidSuccess:(FBBaseAPIManager *)manager {
-
- if (manager == self.getHotPositionAPIManager)
- {
- // if (self.pageListView.isFirstLoading)
- // {
- // [self.navBarView shadeBackgroundColorWithAlpha:0];
- // }
- [self.pageListView managerCallAPIDidSuccess:manager];
- }
-
- if (manager == self.getBannerAPIManager)
- {//轮播
- id fetchData = [manager fetchDataWithBox:self.homeDataBox];
- id bannerList = [fetchData valueForKeyPath:@"data.bannerList"];
- if ([bannerList isKindOfClass:[NSArray class]] && [bannerList count] > 0)
- {
- self.headerView.adScrollView.bannerList = bannerList;
- }
- //跑马灯
- id broadcastList = [fetchData valueForKeyPath:@"data.broadcastList"];
- if ([broadcastList isKindOfClass:[NSArray class]] && [broadcastList count] > 0)
- {
- self.headerView.adScrollView.scrollTextView.scrollText = [broadcastList componentsJoinedByString:@" "];;
- }
- }
-
- if (manager == self.checkAPIManager)
- {
- id fetchData = [manager fetchDataWithBox:nil];
- //判断是否是最新版本
- id isLatest = [fetchData valueForKeyPath:@"data.isLatest"];
- if ([isLatest isKindOfClass:[NSNumber class]] && ![isLatest boolValue])
- {
- id isForceUpdate = [fetchData valueForKeyPath:@"data.hpVersion.isForceUpdate"];
- id description = [fetchData valueForKeyPath:@"data.hpVersion.description"];
-
- if ([isForceUpdate isKindOfClass:[NSNumber class]] && [description isKindOfClass:[NSString class]])
- {
- HJUpdateViewController *vc = [[HJUpdateViewController alloc] init];
- vc.cancelHidden = [isForceUpdate boolValue];
- vc.updateText = description;
- vc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
- vc.modalPresentationStyle = UIModalPresentationOverCurrentContext;
- self.navigationController.definesPresentationContext = NO;
- [self presentViewController:vc animated:YES completion:nil];
- }
- }
- }
- }
- - (void)managerCallAPIDidFailed:(FBBaseAPIManager *)manager {
-
- if (manager == self.getHotPositionAPIManager)
- {
- [self.pageListView managerCallAPIDidFailed:manager];
- }
- }
- #pragma mark - HJPageListViewDelegate
- - (void)refreshPageListView:(HJPageListView *)pageListView {
- // 调用banner图片URL
- [self.getBannerAPIManager start];
- }
- #pragma mark - event response 通知
- /* 城市通知 */
- - (void)cityPickerViewSelectCity:(NSNotification *)notification {
- //只有是第一次的时候
- HJCityPickerCity *city = (HJCityPickerCity *)notification.object;
- self.navBarView.city = city.name;
- // 调用热门岗位API
- self.getHotPositionAPIManager.cityCode = city.adcode;
- [self.getHotPositionAPIManager start];
- }
- #pragma mark - private methods
- #pragma mark - lazy
- - (HJCheckVersionAPIManager *)checkAPIManager {
-
- if (_checkAPIManager == nil)
- {
- _checkAPIManager = [[HJCheckVersionAPIManager alloc] init];
- _checkAPIManager.APIManagerDelegate = self;
- }
- return _checkAPIManager;
- }
- - (AMapLocationManager *)locationManager {
-
- if (_locationManager == nil)
- {
- _locationManager = [[AMapLocationManager alloc] init];
- // 带逆地理信息的一次定位(返回坐标和地址信息)
- [_locationManager setDesiredAccuracy:kCLLocationAccuracyHundredMeters];
- // [_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
- // 定位超时时间,最低2s,此处设置为2s
- _locationManager.locationTimeout = 2;
- // 逆地理请求超时时间,最低2s,此处设置为2s
- _locationManager.reGeocodeTimeout = 2;
- }
- return _locationManager;
- }
- - (HJHomeDataBox *)homeDataBox {
-
- if (_homeDataBox == nil)
- {
- _homeDataBox = [[HJHomeDataBox alloc] init];
- }
- return _homeDataBox;
- }
- - (HJPositionDataBox *)positionDataBox {
-
- if (_positionDataBox == nil)
- {
- _positionDataBox = [[HJPositionDataBox alloc] init];
- }
- return _positionDataBox;
- }
- - (HJGetHotPositionAPIManager *)getHotPositionAPIManager {
-
- if (_getHotPositionAPIManager == nil)
- {
- _getHotPositionAPIManager = [[HJGetHotPositionAPIManager alloc] init];
- _getHotPositionAPIManager.APIManagerDelegate = self;
- _getHotPositionAPIManager.APIManagerInterceptor = self;
- }
- return _getHotPositionAPIManager;
- }
- - (HJGetDynamicBannerAPIManager *)getBannerAPIManager {
-
- if (_getBannerAPIManager == nil)
- {
- _getBannerAPIManager = [[HJGetDynamicBannerAPIManager alloc] init];
- _getBannerAPIManager.APIManagerDelegate = self;
- }
- return _getBannerAPIManager;
- }
- - (HJPageListView *)pageListView {
-
- if (_pageListView == nil)
- {
- _pageListView = [[HJPageListView alloc] init];
- _pageListView.tableView.delegate = self;
- _pageListView.tableView.dataSource = self.positionDataBox;
- _pageListView.tableView.tableHeaderView = self.headerView;
- _pageListView.APIManager = self.getHotPositionAPIManager;
- _pageListView.dataBox = self.positionDataBox;
- _pageListView.delegate = self;
- _pageListView.tableView.backgroundColor = COLOR_F5F5F5;
- // 去除顶部空白
- if (@available(iOS 11.0, *))
- {
- _pageListView.tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;
- }
- else
- {
- self.automaticallyAdjustsScrollViewInsets = NO;
- }
- // 解决底部被UITabBar遮挡的问题
- self.edgesForExtendedLayout = UIRectEdgeNone;
- _pageListView.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
- //解决tabBar变灰问题,在退出登录然后重新登录进首页的时候
- self.tabBarController.tabBar.backgroundColor = [UIColor whiteColor];
- }
- return _pageListView;
- }
- - (HJHomeHeaderView *)headerView {
-
- if (_headerView == nil)
- {
- _headerView = [[HJHomeHeaderView alloc] init];
- _headerView.jobSortView.delegate = self;
- _headerView.adScrollView.delegate = self;
- }
- return _headerView;
- }
- - (HJNavBarView *)navBarView {
-
- if (_navBarView == nil)
- {
- _navBarView = [[HJNavBarView alloc] init];
- _navBarView.delegate = self;
- }
- return _navBarView;
- }
- - (UIButton *)customerServiceBtn {
-
- if (_customerServiceBtn == nil)
- {
- _customerServiceBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [_customerServiceBtn setImage:[UIImage imageNamed:@"customerService_icon"] forState:UIControlStateNormal];
- [_customerServiceBtn addTarget:self action:@selector(customerServiceClick:) forControlEvents:UIControlEventTouchUpInside];
- UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)] ;
- [_customerServiceBtn addGestureRecognizer:pan] ;
- }
- return _customerServiceBtn;
- }
- @end
|