热更新demo

InterViewPageViewController.m 22KB

    // // InterViewPageViewController.m // ThePaperBase // // Created by YoungLee on 15/8/6. // Copyright (c) 2015年 scar1900. All rights reserved. // #import "InterViewPageViewController.h" #import "ATPagingView.h" #import "StyledPageControl.h" #import "topicListController.h" #import "topicContentController.h" #define kXHLabelBaseTag 1000 #define kXHLabelAssistTag 2000 #define TextGrayColor @"0x555555" #define TextBlackColor @"0x2d2d32" #define CATETAG 1001 @interface InterViewPageViewController ()<ATPagingViewDelegate,UIGestureRecognizerDelegate,topicListDelegate>{ NSString *hotOrLaster; NSInteger *currIndex; UISwipeGestureRecognizer *swipeGesture; BOOL enablePan; } @property(nonatomic, strong)ATPagingView *pageView; @property(nonatomic, strong)NSArray *viewControllers; @property(nonatomic, strong)NSMutableArray *pageViewControllers; @property(nonatomic, strong)NSArray *mainTitles; //主标题 @property(nonatomic, strong)NSArray *assitTitles; //副标题 @property(nonatomic, strong)NSMutableArray *mainTitleLabels; //标题标签 @property(nonatomic, assign)CGPoint contentOffset; @property(nonatomic, strong)StyledPageControl *pageControl; //页码指示器 @property(nonatomic, strong)UIButton *addBtn; //回退按钮 @property(nonatomic, strong)UIButton *listBtn; //调整导航按钮 @property(nonatomic, strong)UIButton *hotBtn;//热门按钮 @property(nonatomic, strong)UIButton *lasterBtn;//最新按钮 @property(nonatomic, strong)UIButton *hotClick;//热门点击区域 @property(nonatomic, strong)UIButton *lasterClick;//最新点击区域 @property(nonatomic, assign)BOOL isOpenList; @property(nonatomic, strong)NSMutableArray *cateList; @property(nonatomic, assign)NSInteger index; @end @implementation InterViewPageViewController @synthesize cateList = _cateList; @synthesize cateBo = _cateBo; @synthesize pageView; @synthesize viewControllers; @synthesize pageViewControllers; @synthesize mainTitles = _mainTitles; @synthesize assitTitles = _assitTitles; @synthesize contentOffset = _contentOffset; @synthesize index = _index; @synthesize initIndex = _initIndex; @synthesize isOpenList; #pragma mark - some property of page - (void)setMainTitles:(NSArray *)titles { _mainTitles = titles; [self addMainTitleLabel]; if (self.pageControl.numberOfPages == 0) { self.pageControl.numberOfPages = self.mainTitleLabels.count; } } //viewControllers in page view - (void) setViewControllers:(NSArray *)controllers { viewControllers = controllers; } - (NSMutableArray *)mainTitleLabels { if (!_mainTitleLabels) { _mainTitleLabels = [[NSMutableArray alloc] initWithCapacity:0]; } return _mainTitleLabels; } //set content offset - (void)setContentOffset:(CGPoint)offset { _contentOffset = offset; CGFloat xOffset = offset.x; CGFloat normalWidth = CGRectGetWidth(self.naviBar.bounds); CGFloat leftPadding = CGRectGetWidth(self.naviBar.bounds)-100; CGFloat scale = CGRectGetWidth(self.view.bounds)/leftPadding; [self.mainTitleLabels enumerateObjectsUsingBlock:^(UILabel *titleLabel, NSUInteger idx, BOOL *stop) { if ([titleLabel isKindOfClass:[UILabel class]]) { // frame CGRect titleLabelFrame = titleLabel.frame; titleLabelFrame.origin.x = 50+idx*leftPadding - xOffset / scale; titleLabel.frame = titleLabelFrame; // alpha CGFloat alpha; if(xOffset < normalWidth * idx) { alpha = (xOffset/ normalWidth - idx)*2 + 1; }else{ alpha = 1 - ((xOffset - normalWidth * idx) / normalWidth)*2; } titleLabel.alpha = alpha; } }]; } #pragma mark -- set view - (StyledPageControl *)pageControl { if (!_pageControl) { if (isIOS7) { _pageControl = [[StyledPageControl alloc] initWithFrame:(CGRect){CGRectGetWidth(self.naviBar.bounds)/2-50, 60, 100, 10}]; }else { _pageControl = [[StyledPageControl alloc] initWithFrame:(CGRect){CGRectGetWidth(self.naviBar.bounds)/2-50, 42, 100, 10}]; } _pageControl.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; _pageControl.pageControlStyle = PageControlStyleDefault; _pageControl.userInteractionEnabled = NO; _pageControl.hidesForSinglePage = YES; _pageControl.currentPage = self.pageView.currentPageIndex; _pageControl.coreSelectedColor = [UIColor colorWithHexString:@"0x1b84cf"]; _pageControl.coreNormalColor = [UIColor colorWithHexString:@"0xc5c5c5"]; _pageControl.strokeWidth = 5; _pageControl.gapWidth = 4; _pageControl.diameter = 13; } return _pageControl; } - (UIButton*)addBtn { if (!_addBtn) { _addBtn = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _addBtn.frame = CGRectMake(0, 18, 120/2, 120/2); }else { _addBtn.frame = CGRectMake(0, 0, 120/2, 120/2); } if ([[TPUserDefault instance].isNightMode intValue] == 0) { [_addBtn setImage:Image(@"detailPage/backBtn.png") forState:UIControlStateNormal]; [_addBtn setImage:Image(@"detailPage/backBtn_s.png") forState:UIControlStateHighlighted]; }else { [_addBtn setImage:Image(@"detailPage/backBtn_night.png") forState:UIControlStateNormal]; [_addBtn setImage:Image(@"detailPage/backBtn_night_s.png") forState:UIControlStateHighlighted]; } [_addBtn setImage:Image(@"detailPage/backBtn_s.png") forState:UIControlStateHighlighted]; [_addBtn setImageEdgeInsets:UIEdgeInsetsMake(20, 15, 20, 25)]; [_addBtn addTarget:self action:@selector(handleAddBtn:) forControlEvents:UIControlEventTouchUpInside]; } return _addBtn; } -(UIButton *)hotBtn{ if (!_hotBtn) { _hotBtn = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _hotBtn.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-50, 24+14, 40/2, 40/2); }else { _hotBtn.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-50, 24, 40/2, 40/2); } _hotBtn.titleLabel.font = appFont(TEXT_SIX_LEVELSIZE, NO); _hotBtn.selected = YES; _hotBtn.backgroundColor = [UIColor colorWithHexString:BLUECOLOR]; [_hotBtn setTitleColor:[UIColor colorWithHexString:TextLightGray] forState:UIControlStateNormal]; [_hotBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; [_hotBtn setTitle:@"热" forState:UIControlStateNormal]; } return _hotBtn; } -(UIButton *)hotClick{ if (!_hotClick) { _hotClick = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _hotClick.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-60, 14+14, 30,40); }else { _hotClick.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-60, 14, 30,40); } [_hotClick addTarget:self action:@selector(hotSelector:) forControlEvents:UIControlEventTouchUpInside]; } return _hotClick; } -(UIButton *)lasterBtn{ if (!_lasterBtn) { _lasterBtn = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _lasterBtn.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-60/2, 24+14, 40/2, 40/2); }else { _lasterBtn.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-60/2, 24, 40/2, 40/2); } _lasterBtn.titleLabel.font = appFont(TEXT_SIX_LEVELSIZE, NO); _lasterBtn.backgroundColor = [UIColor colorWithHexString:LINECOLOR]; [_lasterBtn setTitleColor:[UIColor colorWithHexString:TextLightGray] forState:UIControlStateNormal]; [_lasterBtn setTitleColor:[UIColor whiteColor] forState:UIControlStateSelected]; [_lasterBtn setTitle:@"新" forState:UIControlStateNormal]; [_lasterBtn addTarget:self action:@selector(lasterSelector:) forControlEvents:UIControlEventTouchUpInside]; } return _lasterBtn; } -(UIButton *)lasterClick{ if (!_lasterClick) { _lasterClick = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _lasterClick.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-30, 28, 30,40); }else { _lasterClick.frame = CGRectMake(CGRectGetWidth(self.naviBar.frame)-30, 14, 30,40); } [_lasterClick addTarget:self action:@selector(lasterSelector:) forControlEvents:UIControlEventTouchUpInside]; } return _lasterClick; } #pragma mark -- button Handler #pragma mark - naviBar tap gesture - (void)tapNaviBar:(id)sender { id obj = self.pageViewControllers[self.pageView.currentPageIndex]; [((topicListController *)obj) scrollTableViewToTop]; } -(void) handleAddBtn:(UIButton *)btn{ [self.navigationController popViewControllerAnimated:YES]; } -(void) hotSelector:(UIButton *)btn{ if (!btn.selected) { if (!self.hotBtn.selected) { [MobClick event:@"60"]; self.hotBtn.selected = !self.hotBtn.selected; self.lasterBtn.selected = NO; [self.hotBtn setBackgroundColor:[UIColor colorWithHexString:BLUECOLOR]]; [self.lasterBtn setBackgroundColor:[UIColor colorWithHexString:LINECOLOR]]; // ((topicListController*)self.pageViewControllers[self.pageView.currentPageIndex]).hotOrLastr = @"1"; [(topicListController*)self.pageViewControllers[self.pageView.currentPageIndex] changeHotOrLast:@"1"]; hotOrLaster = @"1"; } } } -(void) lasterSelector:(UIButton *)btn{ if (!btn.selected) { if (!self.lasterBtn.selected) { [MobClick event:@"60"]; self.lasterBtn.enabled = YES; self.lasterBtn.selected = !self.lasterBtn.selected; self.hotBtn.selected = NO; [self.hotBtn setBackgroundColor:[UIColor colorWithHexString:LINECOLOR]]; [self.lasterBtn setBackgroundColor:[UIColor colorWithHexString:BLUECOLOR]]; // ((topicListController*)self.pageViewControllers[self.pageView.currentPageIndex]).hotOrLastr = @"0"; [(topicListController*)self.pageViewControllers[self.pageView.currentPageIndex] changeHotOrLast:@"0"]; hotOrLaster = @"0"; } } } #pragma mark - load view - (void)viewDidLoad { [super viewDidLoad]; enablePan = NO; [self.naviBar addSubview:self.addBtn]; self.view.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [self remoteCate]; UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc]initWithTarget:self action:@selector(paningGestureReceive:)]; recognizer.delegate = self; [recognizer delaysTouchesBegan]; [self.view addGestureRecognizer:recognizer]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer { return YES; } - (void)paningGestureReceive:(UISwipeGestureRecognizer*)pan {// 问吧列表,切换第一第二个类型,极易闪退(bug:5064) if (self.pageView.currentPageIndex != 0) { return; } if (!enablePan) { return; } topicListController *listController = self.pageViewControllers[0]; if (!listController) { return; } if (listController.tableView.isDragging) { return; } CGPoint touchPoint = [pan locationInView:self.naviBar]; if (touchPoint.y <= self.naviBar.frame.size.height) { return; } [self.navigationController popViewControllerAnimated:YES]; // [(MLNavigationController*)self.navigationController paningGestureReceive:pan]; } -(void)viewDidAppear:(BOOL)animated{ if (!self.cateList ) { [self setCateId:nil]; } } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } #pragma mark -- set data -(void)setCateBo:(categoryBO *)bo{ _cateBo = bo; } -(void)setCateList:(NSMutableArray *)list{ _cateList = list; [_cateList enumerateObjectsUsingBlock:^(categoryBO *cateBo, NSUInteger idx, BOOL *stop) { if ([_cateBo.category intValue] == [cateBo.category intValue]) { self.index = idx; return ; } }]; if (!self.index) { self.index = _initIndex; } } -(void)setIndex:(NSInteger)inde{ _index = inde; [self addSubViews]; self.pageView.currentPageIndex = _index; } -(void)setInitIndex:(NSInteger)inde{ _initIndex = inde; } -(void) remoteCate{ [Remote doJsonAction:CATETAG requestUrl:getTopicCategorysURL parameter:nil delegate:self]; } #pragma mark -- set view - (void)addSubViews { [self setPageViews]; // [self.naviBar addSubview:self.addBtn]; [self.naviBar addSubview:self.hotBtn]; [self.naviBar addSubview:self.lasterBtn]; [self.naviBar addSubview:self.hotClick]; [self.naviBar addSubview:self.lasterClick]; } - (void)setPageViews { self.pageView = [[ATPagingView alloc] initWithFrame:CGRectMake(0, self.barHeight, self.view.frame.size.width, self.view.frame.size.height-self.barHeight)]; self.pageView.gapBetweenPages = 0; self.pageView.recyclingEnabled = NO; self.pageView.backgroundColor = [UIColor clearColor]; self.pageView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.pageView.delegate = self; self.pageView.scrollView.scrollEnabled = YES; self.pageView.scrollView.bounces = NO; [self.view addSubview:self.pageView]; if (_cateList.count > 0) { NSMutableArray *main = [NSMutableArray array]; NSMutableArray *vcs = [NSMutableArray array]; [_cateList enumerateObjectsUsingBlock:^(categoryBO *bo, NSUInteger idx, BOOL *stop) { [main addObject:[NSString stringWithFormat:@"问吧-%@",bo.name]]; topicListController *vc = [topicListController new]; vc.cateBO = bo; vc.delegate =self; [vcs addObject:vc]; }]; self.mainTitles = [NSArray arrayWithArray:main]; self.viewControllers = [NSArray arrayWithArray:vcs]; } [viewControllers enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { if (nil == self.pageViewControllers) { self.pageViewControllers = [NSMutableArray array]; } if ([obj isKindOfClass:[UIViewController class]]) { [self.pageViewControllers addObject:obj]; } else { [self.pageViewControllers addObject:[NSNull null]]; } }]; UIView *view = self.pageView; [self.pageView removeFromSuperview]; view.frame = CGRectMake(0, self.barHeight, self.view.frame.size.width, self.view.frame.size.height-self.barHeight); [self.view addSubview:view]; [self.pageView reloadData]; [self.naviBar addSubview:self.pageControl]; enablePan = YES; } - (void)addMainTitleLabel { if (!self.mainTitles.count) { return; } [self.mainTitleLabels enumerateObjectsUsingBlock:^(UILabel *label, NSUInteger idx, BOOL *stop) { label.hidden = YES; }]; [self.mainTitles enumerateObjectsUsingBlock:^(NSString *title, NSUInteger idx, BOOL *stop) { UILabel *titleLabel = (UILabel *)[self.view viewWithTag:kXHLabelBaseTag + idx]; CGRect titleLabelFrame = CGRectMake(0, 0, 0, 0); if (isIOS7) { titleLabelFrame = CGRectMake(50+(idx * 250), 38, CGRectGetWidth(self.naviBar.bounds)-100, 20); }else { titleLabelFrame = CGRectMake(50+(idx * 250), 25-16, CGRectGetWidth(self.naviBar.bounds)-100, 20); } if (!titleLabel) { titleLabel = [[UILabel alloc] init]; [self.view addSubview:titleLabel]; [self.mainTitleLabels addObject:titleLabel]; titleLabel.tag = kXHLabelBaseTag+idx; } titleLabel.hidden = NO; titleLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; titleLabel.font = appFont(TEXT_ONE_PLUS_LEVELSIZE, NO); titleLabel.textAlignment = NSTextAlignmentCenter; titleLabel.textColor = [UIColor colorWithHexString:TextBlack]; titleLabel.backgroundColor = [UIColor clearColor]; titleLabel.text = title; titleLabel.frame = titleLabelFrame; if (self.pageView.currentPageIndex == idx) { titleLabel.alpha = 1.0; } else { titleLabel.alpha = 0.0; } }]; } #pragma mark - ATPagingViewDelegate methods - (NSInteger)numberOfPagesInPagingView:(ATPagingView *)pagingView { return self.viewControllers.count; } - (UIView *)viewForPageInPagingView:(ATPagingView *)pagingView atIndex:(NSInteger)index { return ((topicListController *)self.pageViewControllers[index]).view; } - (void)callBackFromClickCard:(UIViewController*)vc { } - (void)actionForNavigationController:(NSInteger)index pageViewControllers:(NSMutableArray*)pageArray{ } - (void)currentPageDidChangeInPagingView:(ATPagingView *)pagingView { } - (void)pagesDidChangeInPagingView:(ATPagingView *)view { self.pageControl.currentPage = view.currentPageIndex; ((topicListController*)self.pageViewControllers[self.pageView.currentPageIndex]).hotOrLastr = hotOrLaster; [(topicListController*)self.pageViewControllers[self.pageView.currentPageIndex] pageChangeBegin:self.pageView.currentPageIndex]; } - (void)pagingViewWillBeginMoving:(ATPagingView *)pagingView { } - (void)pagingViewDidEndMoving:(ATPagingView *)pagingView { if (pagingView.currentPageIndex == 0) { enablePan = YES; }else { enablePan = NO; } } - (void)pagingViewdDidScroll:(UIScrollView *)scrollerView { self.contentOffset = scrollerView.contentOffset; enablePan = NO; } -(void)remoteResponsSuccess:(int)actionTag withResponsData:(id)responsData{ if (CATETAG == actionTag) { NSMutableArray *cateArray = [NSMutableArray array]; NSArray *tempCataList = responsData[@"dataList"]; [tempCataList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { categoryBO *cate = setJsonDicToDataModel(obj, [categoryBO class]); [cateArray addObject:cate]; }]; self.cateList = cateArray; [self saveRemoteDataToCoreData:responsData]; // [self addSubViews]; } } - (void)saveRemoteDataToCoreData:(id)resData { NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc]init]; //为已创建好的实体利用检索到的上下文创建一个实体描述 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"ListCateDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; [request setEntity:entityDescription]; //确定持久库中是否存在与此字段相对应的托管对象,所以穿件一个谓词来确定字段的正确对象: // NSPredicate *pred = [NSPredicate predicateWithFormat:@"category == %@",]; // [request setPredicate:pred]; ListCateDB *listContPageDB = nil; NSArray *objs = [[CoreDataManager shareInstance].managedObjectContext executeFetchRequest:request error:&error]; if (objs == nil) { TPLOG(@"there was an error!!"); } if (objs.count > 0) { listContPageDB = [objs objectAtIndex:0]; [[CoreDataManager shareInstance].managedObjectContext deleteObject:listContPageDB]; } ListTopicDB *listDB = nil; listDB = [NSEntityDescription insertNewObjectForEntityForName:@"ListCateDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; listDB = makeDicToCoreDataModel(resData, listDB); listDB.date = getLocalDate(); [[CoreDataManager shareInstance] saveContext]; } - (void)getRefreshDataFromDic:(NSDictionary*)sourceDic sourceKey:(NSString*)sourceKey contentClass:(Class)contentClass{ NSArray *contList = sourceDic[sourceKey]; if (contList && contList.count > 0) { NSMutableArray *tempArray = [NSMutableArray array]; [contList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { categoryBO *cateBo = setJsonDicToDataModel(obj, [categoryBO class]); [tempArray addObject:cateBo]; }]; self.cateList = tempArray; }else { self.cateList = [NSMutableArray array]; TPLOG(@"分类列表为空"); } // [self setCateId:nil]; } -(void)setCateId:(NSString *)cateID{ // if (self.cateList.count == 0) { NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc]init]; //为已创建好的实体利用检索到的上下文创建一个实体描述 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"ListCateDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; [request setEntity:entityDescription]; //确定持久库中是否存在与此字段相对应的托管对象,所以穿件一个谓词来确定字段的正确对象: // NSPredicate *pred = [NSPredicate predicateWithFormat:@"category == %@",_cateId]; // [request setPredicate:pred]; ListCateDB *listContPageDB = nil; NSArray *objs = [[CoreDataManager shareInstance].managedObjectContext executeFetchRequest:request error:&error]; if (objs == nil) { TPLOG(@"there was an error!!"); } if (objs.count > 0) { listContPageDB = [objs objectAtIndex:0]; NSDictionary *coreDataDic = makeCoreDataModelToDic(listContPageDB, [ListCateDB class]); [self getRefreshDataFromDic:coreDataDic sourceKey:@"dataList" contentClass:[categoryBO class]]; } // } } -(void)gotoInfo:(TopicInfoBO *)topicBO{ topicContentController *topicVC = [topicContentController new]; topicVC.preTopicInfo = topicBO; [self.navigationController pushViewController:topicVC animated:YES]; } @end