|
//
// 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
|