热更新demo

orderController.m 45KB

    // // orderController.m // ThePaperDemo // // Created by scar1900 on 14-9-29. // Copyright (c) 2014年 scar1900. All rights reserved. // #import "orderController.h" #import "AppDelegate.h" #import "SCGIFImageView.h" #import "nodeInfoController.h" #import "nodeInfoCell.h" #import "CoreAnimationEffect.h" #import "LBorderView.h" #import "searchController.h" #import "loginHomeController.h" #import "leakController.h" #define ORDERBUTTONTAG 6000 #define ORDEREDVIEWTAG 6500 @interface orderController() { NSString* isUserSystemFont; NSMutableArray *colorArray; CGFloat btnHeight; } @property(nonatomic, strong)UIImageView *orderImageView; @property(nonatomic, strong)UIButton *searchBtn;//搜索 @property(nonatomic, strong)UIButton *leakBtn; //报料 @property(nonatomic, strong)UIView *lineView; @property(nonatomic, strong)UIView *nodeBtnView; //订阅侧边栏 @property(nonatomic, strong)NSMutableArray *orderButtonArray; @property(nonatomic, strong)NSMutableArray *nodeListArray; //@property(nonatomic, strong)SCGIFImageView *waitCursor; //@property(nonatomic, strong)UIView *waitBackView; @property(nonatomic, strong)UIView *colorView; @property(nonatomic, strong)nodeInfoController *nodeInfoController; @property(nonatomic, assign)NSInteger currentIndex; @property(nonatomic, strong)UILongPressGestureRecognizer *longGesture; @property(nonatomic, strong)UIView *orderedView; //订阅拖动后的View @property(nonatomic, strong)LBorderView *orderLineView; //拖动后的虚线 @property(nonatomic, strong)NSMutableArray *orderChildList; @end @implementation orderController @synthesize orderButtonArray; @synthesize nodeListArray = _nodeListArray; @synthesize currentIndex = _currentIndex; @synthesize longGesture; @synthesize orderChildList=_orderChildList; - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [self.view addSubview:self.searchBtn]; [self.view addSubview:self.leakBtn]; if (rect_screen.size.height>960/2) { btnHeight = 145/2; }else { btnHeight = 60; } /** * bug:5374(【适配性】栏目导航页:“订阅”显示不全,详情见图) */ UIView *btnLine = [UIView new]; btnLine.backgroundColor = [UIColor colorWithHexString:LINECOLOR]; [self.view addSubview:btnLine]; CGFloat offset = 0; if (isIOS7) offset = 9; [btnLine makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(self.searchBtn.centerY).offset(offset); make.width.equalTo(@1); make.height.equalTo(@18); make.right.equalTo(self.searchBtn.right); }]; // if (isIOS7) { // _searchBarView.frame = CGRectMake(0, 0, rect_screen.size.width-50, 156/2); // }else { // _searchBarView.frame = CGRectMake(0, 0, rect_screen.size.width-50, 60); // } self.view.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; isUserSystemFont = [TPUserDefault instance].isUseSystemFont; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshAfterOpenNightMode:) name:REFRESHAFTERNIGHTMODE object:nil]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.searchBtn.titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); self.leakBtn.titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); needGestureOfSideController(YES); NSMutableArray *channelList = [TPUserDefault instance].channldataList; NSDictionary *currentDic = channelList[[TPUserDefault instance].currentPageIndex]; __block NSInteger curIndex = -1; curIndex = self.currentIndex; [self.nodeListArray enumerateObjectsUsingBlock:^(nodeObjectBO* obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj.nodeId intValue] == [currentDic[@"nodeId"] intValue]) { curIndex = idx; } }]; if ([TPUserDefault instance].userBO && curIndex == 5) { [self remoteAskOrderData]; return; } if (!self.nodeListArray || self.nodeListArray.count == 0) { NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc]init]; //为已创建好的实体利用检索到的上下文创建一个实体描述 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"NodeListDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; [request setEntity:entityDescription]; NodeListDB *nodeListDB = nil; NSArray *objs = [[CoreDataManager shareInstance].managedObjectContext executeFetchRequest:request error:&error]; if (objs == nil) { TPLOG(@"there was an error!!"); } if (objs.count > 0) { nodeListDB = [objs objectAtIndex:0]; NSDictionary *coreDataDic = makeCoreDataModelToDic(nodeListDB, [NodeListDB class]); self.nodeListArray = [NSMutableArray array]; if (coreDataDic && coreDataDic[@"nodeList"]) { NSArray *nodeArray = coreDataDic[@"nodeList"]; NSMutableArray *tempArray = [NSMutableArray array]; [nodeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeInfo = setJsonDicToDataModel(obj, [nodeObjectBO class]); [tempArray addObject:nodeInfo]; }]; self.nodeListArray = tempArray; } } [self askForRemoteNodeList]; }else { if ([isUserSystemFont intValue] != [[TPUserDefault instance].isUseSystemFont intValue]) { [self.nodeInfoController.collectionView reloadData]; isUserSystemFont = [TPUserDefault instance].isUseSystemFont; for (int i=0;i<5;i++) { UIButton *orderBtn = (UIButton*)[self.nodeBtnView viewWithTag:6000+i]; if (orderBtn) { orderBtn.titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); } } } self.orderedView.hidden = NO; nodeObjectBO *nodeInfo = self.nodeListArray[self.currentIndex]; if ([nodeInfo.nodeId intValue] == -1) { nodeInfo.myOrderStatus = @"2"; self.orderChildList = [NSMutableArray array]; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = self.orderChildList; } if (curIndex < 0) { return; } UIButton *orderBtn = (UIButton*)[self.nodeBtnView viewWithTag:ORDERBUTTONTAG+curIndex]; [self orderClickHandler:orderBtn]; /** * bug:5163(栏目页的频道未与正文的频道同步) */ } } //获取网络栏目信息 - (void)askForRemoteNodeList { NSDictionary *dic = @{@"type":@"2"}; [Remote doJsonAction:1 requestUrl:allNodeListURL parameter:dic delegate:self]; } - (UIButton*)searchBtn { if (!_searchBtn) { _searchBtn = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _searchBtn.frame = CGRectMake(0, 0, (rect_screen.size.width-50)/2, 156/2); }else { _searchBtn.frame = CGRectMake(0, 0, (rect_screen.size.width-50)/2, 60); } [_searchBtn setTitle:@"搜索" forState:UIControlStateNormal]; [_searchBtn addTarget:self action:@selector(pushToSearch:) forControlEvents:UIControlEventTouchUpInside]; if (isIOS7) { [_searchBtn setTitleEdgeInsets:UIEdgeInsetsMake(CGRectGetHeight(_searchBtn.bounds)/2-7+9, CGRectGetWidth(_searchBtn.bounds)/2-15, CGRectGetHeight(_searchBtn.bounds)/2-7-9, CGRectGetWidth(_searchBtn.bounds)/2-15)]; } UIImageView *searchIconImage = [[UIImageView alloc]initWithImage:Image(@"detailPage/searchIcon.png")]; searchIconImage.userInteractionEnabled = YES; [_searchBtn addSubview:searchIconImage]; [searchIconImage makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_searchBtn.centerX).offset(-35); make.centerY.equalTo(_searchBtn.titleLabel.centerY); make.size.mas_equalTo(CGSizeMake(15, 15)); }]; } _searchBtn.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; [_searchBtn setTitleColor:[UIColor colorWithHexString:TextGray] forState:UIControlStateNormal]; [_searchBtn setTitleColor:[UIColor colorWithHexString:TextLightGray] forState:UIControlStateHighlighted]; _searchBtn.titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); return _searchBtn; } - (UIButton*)leakBtn { if (!_leakBtn) { _leakBtn = [UIButton buttonWithType:UIButtonTypeCustom]; if (isIOS7) { _leakBtn.frame = CGRectMake(CGRectGetMaxX(self.searchBtn.frame), 0, (rect_screen.size.width-50)/2, 156/2); }else { _leakBtn.frame = CGRectMake(CGRectGetMaxX(self.searchBtn.frame), 0, (rect_screen.size.width-50)/2, 60); } [_leakBtn setTitle:@"报料" forState:UIControlStateNormal]; [_leakBtn addTarget:self action:@selector(pushToLeak:) forControlEvents:UIControlEventTouchUpInside]; if (isIOS7) { [_leakBtn setTitleEdgeInsets:UIEdgeInsetsMake(CGRectGetHeight(_leakBtn.bounds)/2-7+9, CGRectGetWidth(_leakBtn.bounds)/2-15, CGRectGetHeight(_leakBtn.bounds)/2-7-9, CGRectGetWidth(_leakBtn.bounds)/2-15)]; } UIImageView *leakImageView = [[UIImageView alloc]initWithImage:Image(@"detailPage/leakIcon.png")]; leakImageView.userInteractionEnabled = YES; [_leakBtn addSubview:leakImageView]; [leakImageView makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(_leakBtn.centerX).offset(-35); make.centerY.equalTo(_leakBtn.titleLabel.centerY); make.size.mas_equalTo(CGSizeMake(16, 16)); }]; } _leakBtn.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; [_leakBtn setTitleColor:[UIColor colorWithHexString:TextGray] forState:UIControlStateNormal]; [_leakBtn setTitleColor:[UIColor colorWithHexString:TextLightGray] forState:UIControlStateHighlighted]; _leakBtn.titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); return _leakBtn; } - (UIView*)lineView { if (!_lineView) { _lineView = [[UIView alloc]initWithFrame:CGRectMake(50, CGRectGetMaxY(self.searchBtn.frame), 5, CGRectGetHeight(self.view.bounds)-CGRectGetHeight(self.searchBtn.bounds))]; _lineView.autoresizingMask = AutoresizingFull; [_lineView addSubview:self.colorView]; } _lineView.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; return _lineView; } - (UIView*)colorView { if (!_colorView) { _colorView = [[UIView alloc]initWithFrame:CGRectZero]; _colorView.hidden = YES; } return _colorView; } - (UIView*)nodeBtnView { if (!_nodeBtnView) { _nodeBtnView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.searchBtn.frame), 50, CGRectGetHeight(self.view.bounds)-CGRectGetHeight(self.searchBtn.bounds))]; _nodeBtnView.autoresizingMask = AutoresizingFull; } _nodeBtnView.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; return _nodeBtnView; } - (LBorderView*)orderLineView { if (!_orderLineView) { _orderLineView = [[LBorderView alloc]initWithFrame:CGRectZero]; _orderLineView.cornerRadius = 0; _orderLineView.borderType = BorderTypeDashed; _orderLineView.borderWidth = 2.0f; _orderLineView.dashPattern = 3.0f; _orderLineView.spacePattern = 3.0f; } _orderLineView.borderColor = [UIColor colorWithHexString:BackGrayGroundColor]; return _orderLineView; } - (UIView*)orderedView { UILabel *titleLabel = (UILabel*)[_orderedView viewWithTag:ORDEREDVIEWTAG]; if (!_orderedView) { _orderedView = [[UIView alloc]initWithFrame:CGRectMake(0, CGRectGetMaxY(self.searchBtn.frame), 50, CGRectGetHeight(self.view.bounds)-CGRectGetHeight(self.searchBtn.bounds))]; _orderedView.autoresizingMask = AutoresizingFull; self.orderLineView.hidden = YES; self.orderLineView.frame = CGRectMake(1, CGRectGetHeight(_orderedView.frame)-695/2, CGRectGetWidth(_orderedView.frame)-4, 580/2); [_orderedView addSubview:self.orderLineView]; if (!titleLabel) { titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(35/2, CGRectGetHeight(_orderedView.frame)-160, 16, 150/2)]; titleLabel.tag = ORDEREDVIEWTAG; titleLabel.text = @"拖入订阅"; titleLabel.textColor = [UIColor colorWithHexString:TextBlack]; titleLabel.textAlignment = NSTextAlignmentLeft; titleLabel.lineBreakMode = NSLineBreakByWordWrapping; titleLabel.numberOfLines = 0; [_orderedView addSubview:titleLabel]; UIImageView *goToOrderImageView = [[UIImageView alloc]initWithFrame:CGRectMake(35/2, CGRectGetMinY(titleLabel.frame)-26, 16, 16)]; goToOrderImageView.userInteractionEnabled = YES; goToOrderImageView.image = Image(@"order/goToOrderIcon.png"); [_orderedView addSubview:goToOrderImageView]; /** * bug:5378(栏目导航页:“拖入订阅”上方箭头没显示,详情见图) */ } } titleLabel.font = appFont(TEXT_FOUR_LEVELSIZE, NO); _orderedView.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; titleLabel.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; return _orderedView; } - (nodeInfoController*)nodeInfoController { if (!_nodeInfoController) { _nodeInfoController = [[nodeInfoController alloc]init]; // _nodeInfoController.view.frame = CGRectMake(55, // CGRectGetMaxY(self.searchBarView.bounds), // 430/2, // CGRectGetHeight(self.view.bounds)- CGRectGetHeight(self.searchBarView.bounds)); // _nodeInfoController.view.autoresizingMask = AutoresizingAuto; __weak typeof(self) Self = self; [_nodeInfoController refreshRemoteOrderData:^{ [Self remoteAskOrderData]; }]; [self.view addSubview:_nodeInfoController.view]; [_nodeInfoController.view makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view.left).offset(55); make.top.equalTo(self.view.top).offset(CGRectGetMaxY(self.searchBtn.bounds)); make.right.equalTo(self.view.right); make.bottom.equalTo(self.view.bottom); }]; } if (!self.longGesture) { self.longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureRecognized:)]; [self.view addGestureRecognizer:self.longGesture]; } return _nodeInfoController; } #pragma mark - data source - (void)setNodeListArray:(NSMutableArray *)list { _nodeListArray = list; if (list.count == 0) { return; } [self.view addSubview:self.lineView]; [self.view addSubview:self.nodeBtnView]; [self.view addSubview:self.orderedView]; [self.view insertSubview:self.orderedView belowSubview:self.nodeBtnView]; [self addChildViewController:self.nodeInfoController]; orderButtonArray = [NSMutableArray array]; if (![TPUserDefault instance].channldataList || [TPUserDefault instance].channldataList.count == 0) { NSDictionary *dic = @{@"type":@"1"}; [Remote doJsonActionWithBlock:0 requestUrl:allNodeListURL parameter:dic withWaitCursor:YES completion:^(BOOL success, NSString *message, id responseData) { if (success) { NSArray *nodeArray = responseData[@"nodeList"]; NSMutableArray *tempArray = [NSMutableArray array]; [nodeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSString *nodeId = obj[@"nodeId"]; NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithDictionary:obj]; [dic setValue:nodeId forKey:@"nodeId"]; NSString *color = dic[@"color"]; color = [color substringWithRange:NSMakeRange(1, 6)]; color = [NSString stringWithFormat:@"0x%@",color]; [dic setValue:color forKey:@"color"]; [tempArray addObject:dic]; }]; if (tempArray.count == 7) { [TPUserDefault instance].channldataList = tempArray; [self addBtnAfterSetNodeList]; if (list.count != 0) { NSMutableArray *channelList = [TPUserDefault instance].channldataList; NSDictionary *currentDic = channelList[[TPUserDefault instance].currentPageIndex]; __block NSInteger curIndex = -1; [self.nodeListArray enumerateObjectsUsingBlock:^(nodeObjectBO* obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj.nodeId intValue] == [currentDic[@"nodeId"] intValue]) { curIndex = idx; } }]; if (curIndex < 0) { return; } UIButton *orderBtn = (UIButton*)[self.nodeBtnView viewWithTag:ORDERBUTTONTAG+curIndex]; [self orderClickHandler:orderBtn]; } } }else { ShowTextMessage(message); } }]; }else { [self addBtnAfterSetNodeList]; } if (list.count == 0) { return; } NSMutableArray *channelList = [TPUserDefault instance].channldataList; NSDictionary *currentDic = channelList[[TPUserDefault instance].currentPageIndex]; __block NSInteger curIndex = -1; [self.nodeListArray enumerateObjectsUsingBlock:^(nodeObjectBO* obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj.nodeId intValue] == [currentDic[@"nodeId"] intValue]) { curIndex = idx; } }]; if (curIndex < 0) { return; } UIButton *orderBtn = (UIButton*)[self.nodeBtnView viewWithTag:ORDERBUTTONTAG+curIndex]; [self orderClickHandler:orderBtn]; /** * bug:5163(栏目页的频道未与正文的频道同步) */ } - (void)addBtnAfterSetNodeList { NSMutableArray *orderTitleArray = [NSMutableArray array]; NSMutableArray *orderTitleEnglishArray = [NSMutableArray array]; colorArray = [NSMutableArray array]; [self.nodeListArray enumerateObjectsUsingBlock:^(nodeObjectBO* obj, NSUInteger idx, BOOL *stop) { if ([obj.nodeId intValue] == -1) { [orderTitleArray addObject:@"订阅"]; }else{ [orderTitleArray addObject:obj.name]; } [orderTitleEnglishArray addObject:obj.enname]; [colorArray addObject:obj.color]; }]; for (int i=0;i<orderTitleArray.count;i++) { UIButton *orderBtn = (UIButton*)[self.nodeBtnView viewWithTag:6000+i]; if (!orderBtn) { self.orderImageView = [UIImageView new]; self.orderImageView.image = Image(@"order/nodeOrder_s.png"); nodeObjectBO *nodeInfo = self.nodeListArray[i]; NSString *colorStr = colorArray[i]; colorStr = [colorStr stringByReplacingOccurrencesOfString:@"#" withString:@"0x"]; orderBtn = [UIButton buttonWithType:UIButtonTypeCustom]; [orderBtn setTitle:orderTitleArray[i] forState:UIControlStateNormal]; [orderBtn setTitleColor:[UIColor colorWithHexString:colorStr] forState:UIControlStateSelected]; orderBtn.titleLabel.lineBreakMode = NSLineBreakByCharWrapping; orderBtn.titleLabel.numberOfLines = 0; orderBtn.tag = ORDERBUTTONTAG + i; [orderBtn addTarget:self action:@selector(orderClickHandler:) forControlEvents:UIControlEventTouchUpInside]; if (i == 0) { orderBtn.selected = YES; NSArray *childList = nodeInfo.childNodeList; NSMutableArray *childNodeArray = [NSMutableArray array]; [childList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeBO = setJsonDicToDataModel(obj, [nodeObjectBO class]); [childNodeArray addObject:nodeBO]; }]; self.nodeInfoController.nodeList = childNodeArray; } if ([nodeInfo.nodeId intValue] != -1) { orderBtn.frame = CGRectMake(0, i*btnHeight, CGRectGetWidth(self.nodeBtnView.bounds), btnHeight); [orderBtn setTitleEdgeInsets:UIEdgeInsetsMake(23, 35/2, 16, 16)]; TPLOG(@"%f",rect_screen.size.height); if (IS_IPHONE4) { [orderBtn setTitleEdgeInsets:UIEdgeInsetsMake(15, 35/2, 16, 16)]; } UIView *btnLine = [[UIView alloc]initWithFrame:CGRectMake(CGRectGetWidth(orderBtn.frame)/2-8, CGRectGetHeight(orderBtn.frame)-1, 16, 1)]; btnLine.backgroundColor = [UIColor colorWithHexString:LINECOLOR]; btnLine.tag = 1000; [orderBtn addSubview:btnLine]; }else { orderBtn.frame = CGRectMake(0, 5*btnHeight, CGRectGetWidth(self.nodeBtnView.bounds), CGRectGetHeight(self.nodeBtnView.bounds)-5*btnHeight); if ([orderTitleArray[i] isEqualToString:@"订阅"]) { [orderBtn addSubview:self.orderImageView]; } [orderBtn setTitleEdgeInsets:UIEdgeInsetsMake(82/2, 35/2, CGRectGetHeight(orderBtn.frame)-btnHeight, 16)]; self.orderImageView.frame = CGRectMake(CGRectGetWidth(orderBtn.bounds)/2-15/2, 15, 15, 15); } [self.nodeBtnView addSubview:orderBtn]; } orderBtn.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [self.orderButtonArray addObject:orderBtn]; orderBtn.titleLabel.font = appFont(TEXT_THREE_LEVELSIZE, NO); [orderBtn setTitleColor:[UIColor colorWithHexString:TextBlack] forState:UIControlStateNormal]; } self.colorView.hidden = NO; nodeObjectBO *nodeInfo = self.nodeListArray[0]; NSString *colorStr = nodeInfo.color; colorStr = [colorStr stringByReplacingOccurrencesOfString:@"#" withString:@"0x"]; self.colorView.frame = CGRectMake(0, 0, CGRectGetWidth(self.lineView.bounds), btnHeight); self.colorView.backgroundColor = [UIColor colorWithHexString:colorStr]; } - (void)orderClickHandler:(UIButton*)btn { [orderButtonArray enumerateObjectsUsingBlock:^(UIButton* button, NSUInteger idx, BOOL *stop) { button.selected = NO; }]; btn.selected = !btn.selected; NSInteger selectIndex = btn.tag - ORDERBUTTONTAG; nodeObjectBO *nodeInfo = self.nodeListArray[selectIndex]; NSString *colorStr = nodeInfo.color; colorStr = [colorStr stringByReplacingOccurrencesOfString:@"#" withString:@"0x"]; [UIView animateWithDuration:0.2 animations:^{ self.colorView.frame = CGRectMake(0, CGRectGetMinY(btn.frame), CGRectGetWidth(self.lineView.bounds), btnHeight); self.colorView.backgroundColor = [UIColor colorWithHexString:colorStr]; }]; if (selectIndex == 5) { self.orderImageView.image = Image(@"order/nodeOrder.png"); }else { self.orderImageView.image = Image(@"order/nodeOrder_s.png"); } self.currentIndex = selectIndex; } - (void)setCurrentIndex:(NSInteger)index { if (_currentIndex != index) { if (self.nodeInfoController.isOpenDeleteMode) { [self.nodeInfoController hideDeleteMode]; } _currentIndex = index; nodeObjectBO *nodeInfo = self.nodeListArray[index]; if (![TPUserDefault instance].userBO) { if ([[UIApplication sharedApplication]isIgnoringInteractionEvents]) { [[UIApplication sharedApplication]endIgnoringInteractionEvents]; } if ([nodeInfo.nodeId intValue] != -1) { NSArray *childList = nodeInfo.childNodeList; NSMutableArray *childNodeArray = [NSMutableArray array]; [childList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeBO = setJsonDicToDataModel(obj, [nodeObjectBO class]); [childNodeArray addObject:nodeBO]; }]; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = childNodeArray; }else { nodeInfo.myOrderStatus = @"2"; self.orderChildList = [NSMutableArray array]; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = self.orderChildList; } }else { if ([nodeInfo.nodeId intValue] != -1) { if ([[UIApplication sharedApplication]isIgnoringInteractionEvents]) { [[UIApplication sharedApplication]endIgnoringInteractionEvents]; } NSArray *childList = nodeInfo.childNodeList; NSMutableArray *childNodeArray = [NSMutableArray array]; [childList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeBO = setJsonDicToDataModel(obj, [nodeObjectBO class]); [childNodeArray addObject:nodeBO]; }]; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = childNodeArray; }else { [[UIApplication sharedApplication]beginIgnoringInteractionEvents]; /** * bug:5446(栏目导航页:订阅与其他栏目快速互切时闪退,见图) */ _currentIndex = index; [self remoteAskOrderData]; } } } } - (void)pushToSearch:(UIButton*)btn { searchController *vc = [searchController new]; [self.navigationController pushViewController:vc animated:YES]; } - (void)pushToLeak:(UIButton*)btn { leakController *vc = [leakController new]; [self.navigationController pushViewController:vc animated:YES]; } - (void)remoteAskOrderData { NSDictionary* childDic = @{@"n":@"-1"}; [Remote doJsonAction:2 requestUrl:childNodeListURL parameter:childDic delegate:self]; } #pragma mark - remote delegate //- (UIView*)waitBackView { // if (!_waitBackView) { // _waitBackView = [[UIView alloc]initWithFrame:self.view.bounds]; // _waitBackView.autoresizingMask = AutoresizingFull; // _waitBackView.backgroundColor = [UIColor clearColor]; // _waitBackView.userInteractionEnabled = YES; // [_waitBackView addSubview:self.waitCursor]; // } // return _waitBackView; //} // //- (SCGIFImageView*)waitCursor { // if (!_waitCursor) { // NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingFormat:@"/%@", Bundle(@"frontPage/loading.gif")]; // NSData* imageData = [NSData dataWithContentsOfFile:filePath]; // _waitCursor = [[SCGIFImageView alloc]initWithFrame:CGRectMake(CGRectGetWidth(self.waitBackView.bounds)/2-25/2, // (CGRectGetHeight(self.waitBackView.bounds))/2-25/2, // 25, // 25)]; // _waitCursor.autoresizingMask = AutoresizingAuto; // _waitCursor.animating = YES; // [_waitCursor setData:imageData]; // _waitCursor.hidden = NO; // } // return _waitCursor; //} // //- (void)startWaitCursor:(int)actionTag { // [self.view addSubview:self.waitBackView]; // [self.view bringSubviewToFront:self.waitBackView]; //} // //- (void)stopWaitCursor:(int)actionTag { // [self.waitBackView removeFromSuperview]; // self.waitBackView = nil; //} - (void)startWaitCursor:(int)actionTag { } - (void)stopWaitCursor:(int)actionTag { } - (void)remoteResponsSuccess:(int)actionTag withResponsData:(id)responsData { if (actionTag == 1) { self.nodeListArray = [NSMutableArray array]; if (responsData && responsData[@"nodeList"]) { NSError *error; NSFetchRequest *request = [[NSFetchRequest alloc]init]; //为已创建好的实体利用检索到的上下文创建一个实体描述 NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"NodeListDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; [request setEntity:entityDescription]; NodeListDB *nodeListDB = nil; NSArray *objs = [[CoreDataManager shareInstance].managedObjectContext executeFetchRequest:request error:&error]; if (objs == nil) { TPLOG(@"there was an error!!"); } if (objs.count > 0) { nodeListDB = [objs objectAtIndex:0]; [[CoreDataManager shareInstance].managedObjectContext deleteObject:nodeListDB]; } NodeListDB *newNodeListDB = nil; newNodeListDB = [NSEntityDescription insertNewObjectForEntityForName:@"NodeListDB" inManagedObjectContext:[CoreDataManager shareInstance].managedObjectContext]; newNodeListDB = makeDicToCoreDataModel(responsData, newNodeListDB); newNodeListDB.date = getLocalDate(); [[CoreDataManager shareInstance] saveContext]; NSArray *nodeArray = responsData[@"nodeList"]; NSMutableArray *tempArray = [NSMutableArray array]; [nodeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeInfo = setJsonDicToDataModel(obj, [nodeObjectBO class]); [tempArray addObject:nodeInfo]; }]; self.nodeListArray = tempArray; } }else if (actionTag == 2){ TPLOG(@"接到订阅数据"); self.orderChildList = [NSMutableArray array]; _currentIndex = 5; /** * bug:5642(【倒退】栏目导航页:如下操作进入栏目导航页,必定闪退) */ if (responsData && responsData[@"nodeList"]) { NSArray *nodeArray = responsData[@"nodeList"]; NSMutableArray *tempArray = [NSMutableArray array]; [nodeArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { nodeObjectBO *nodeInfo = setJsonDicToDataModel(obj, [nodeObjectBO class]); [tempArray addObject:nodeInfo]; }]; [self.orderChildList addObject:@""]; [self.orderChildList addObjectsFromArray:tempArray]; nodeObjectBO *nodeInfo = self.nodeListArray[self.currentIndex]; if (self.orderChildList.count == 0) { nodeInfo.myOrderStatus = @"3"; }else nodeInfo.myOrderStatus = @"1"; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = self.orderChildList; if ([[UIApplication sharedApplication]isIgnoringInteractionEvents]) { [[UIApplication sharedApplication]endIgnoringInteractionEvents]; } } }else if (actionTag==100) { ShowMessage(@"订阅成功", YES); [[NSNotificationCenter defaultCenter] postNotificationName:NEEDREFRESHORDER object:nil]; } } - (void)remoteResponsFailed:(int)actionTag withMessage:(NSString *)message resultCode:(NSString *)code { if ([code intValue] == 3) { self.orderChildList = [NSMutableArray array]; nodeObjectBO *nodeInfo = self.nodeListArray[self.currentIndex]; if (self.orderChildList.count == 0) { nodeInfo.myOrderStatus = @"3"; }else nodeInfo.myOrderStatus = @"1"; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = self.orderChildList; if ([[UIApplication sharedApplication]isIgnoringInteractionEvents]) { [[UIApplication sharedApplication]endIgnoringInteractionEvents]; } return; } ShowTextMessage(message); if (actionTag == 2) { self.orderChildList = [NSMutableArray array]; if ([message isEqualToString:@"您的网络未连接,请设置网络"]) { nodeObjectBO *nodeInfo = self.nodeListArray[4]; nodeInfo.myOrderStatus = @"4"; self.nodeInfoController.orderNodeBO = nodeInfo; self.nodeInfoController.nodeList = self.orderChildList; }else { } if ([[UIApplication sharedApplication]isIgnoringInteractionEvents]) { [[UIApplication sharedApplication]endIgnoringInteractionEvents]; } }else { ShowTextMessage(message); } } /**********************************************************************************/ /**********************************************************************************/ /***************************gesture handler****************************************/ /**********************************************************************************/ /**********************************************************************************/ #pragma mark - long press gesture event - (void)longPressGestureRecognized:(id)sender { UILongPressGestureRecognizer *longPress = (UILongPressGestureRecognizer *)sender; UIGestureRecognizerState state = longPress.state; CGPoint snapLineLocation = [longPress locationInView:self.orderLineView]; if (snapLineLocation.y+CGRectGetWidth(self.nodeInfoController.view.frame)/4> 0 && snapLineLocation.x-CGRectGetWidth(self.nodeInfoController.view.frame)/4< CGRectGetWidth(self.orderLineView.frame)-4) { self.orderLineView.hidden = NO; }else { self.orderLineView.hidden = YES; } CGPoint location = [longPress locationInView:self.view]; // if (location.x <= self.nodeInfoController.view.frame.origin.x) { // return; // } /** * bug:5214(【倒退】在栏目导航页,长按一个栏目拖到左边订阅栏,订阅栏卡主) */ CGPoint collectLoaction = location; collectLoaction.x = collectLoaction.x + self.nodeInfoController.collectionView.contentOffset.x-CGRectGetWidth(self.nodeBtnView.frame); collectLoaction.y = collectLoaction.y + self.nodeInfoController.collectionView.contentOffset.y-CGRectGetHeight(self.searchBtn.frame); NSIndexPath *indexPath = [self.nodeInfoController.collectionView indexPathForItemAtPoint:collectLoaction]; nodeObjectBO *nodeInfo = self.nodeListArray[self.currentIndex]; if ([nodeInfo.nodeId intValue] == -1) { [self myOrderLongPress:longPress indexPath:indexPath]; return; }else if ([nodeInfo.nodeId intValue] == -3) { return; } static UIView *snapshot = nil; static NSIndexPath *sourceIndexPath = nil; switch (state) { case UIGestureRecognizerStateBegan: { if (indexPath) { needGestureOfSideController(NO); [self.view insertSubview:self.orderedView aboveSubview:self.nodeBtnView]; [CoreAnimationEffect animationEaseOut:self.view]; if(!indexPath) { return; } sourceIndexPath = indexPath; nodeInfoCell *cell = (nodeInfoCell*)[self.nodeInfoController.collectionView cellForItemAtIndexPath:indexPath]; [cell setHighlighted:NO]; __block nodeInfoCell *Cell = cell; // Take a snapshot of the selected row using helper method. snapshot = [self customSnapshoFromView:cell]; __block CGPoint center = cell.center; center.y = location.y; center.x = location.x; snapshot.center = center; snapshot.alpha = 0.0; [self.view addSubview:snapshot]; [UIView animateWithDuration:0.2 animations:^{ center.y = location.y; center.x = location.x; snapshot.center = center; snapshot.transform = CGAffineTransformMakeScale(1.1, 1.1); snapshot.alpha = 0.98; } completion:^(BOOL finished) { Cell.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; }]; } break; } case UIGestureRecognizerStateChanged: { CGPoint center = snapshot.center; center.y = location.y; center.x = location.x; snapshot.center = center; break; } default: { //clean up. nodeInfoCell *cell = (nodeInfoCell*)[self.nodeInfoController.collectionView cellForItemAtIndexPath:sourceIndexPath]; __block nodeInfoCell *Cell = cell; __block CGPoint snapShotCenter = cell.center; if (self.orderLineView.hidden) { [UIView animateWithDuration:0.35 animations:^{ snapShotCenter.x = Cell.center.x - self.nodeInfoController.collectionView.contentOffset.x+CGRectGetWidth(self.nodeBtnView.frame); snapShotCenter.y = Cell.center.y - self.nodeInfoController.collectionView.contentOffset.y+CGRectGetHeight(self.searchBtn.frame); snapshot.center = snapShotCenter; snapshot.transform = CGAffineTransformIdentity; snapshot.alpha = 0.0f; Cell.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [Cell setHighlighted:NO]; } completion:^(BOOL finished) { needGestureOfSideController(YES); [snapshot removeFromSuperview]; snapshot = nil; [self.view insertSubview:self.nodeBtnView aboveSubview:self.orderedView]; [CoreAnimationEffect animationEaseOut:self.view]; }]; }else { [UIView animateWithDuration:0.35 animations:^{ snapShotCenter = self.orderLineView.center; snapShotCenter.y = snapShotCenter.y + 70; snapshot.center = snapShotCenter; snapshot.transform = CGAffineTransformMakeScale(0.1,0.1); snapshot.alpha = 0.0f; // [self.scrollTimer invalidate]; } completion:^(BOOL finished) { Cell.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [Cell setHighlighted:NO]; needGestureOfSideController(YES); [snapshot removeFromSuperview]; snapshot = nil; if (![TPUserDefault instance].userBO) { loginHomeController *vc = loginHomeController.new; [self.navigationController pushViewController:vc animated:YES]; [self.view insertSubview:self.nodeBtnView aboveSubview:self.orderedView]; [CoreAnimationEffect animationEaseOut:self.view]; return; } nodeObjectBO *nodeBO = Cell.nodeInfoBO; __block BOOL isHaveOrdered = NO; [self.orderChildList enumerateObjectsUsingBlock:^(nodeObjectBO* obj, NSUInteger idx, BOOL *stop) { if (idx > 0) { if ([nodeBO.nodeId doubleValue] == [obj.nodeId doubleValue]) { isHaveOrdered = YES; } } }]; if (isHaveOrdered) { ShowMessage(@"订阅成功", YES); }else { NSDictionary *dic = @{@"n":nodeBO.nodeId,@"oType":@"1"}; [Remote doJsonAction:100 requestUrl:orderNodeURL parameter:dic delegate:self]; } isHaveOrdered = NO; [self.view insertSubview:self.nodeBtnView aboveSubview:self.orderedView]; [CoreAnimationEffect animationEaseOut:self.view]; }]; } sourceIndexPath = nil; break; } } } - (void)myOrderLongPress:(UILongPressGestureRecognizer*)longPress indexPath:(NSIndexPath*)indexPath { //the long press for order page UIGestureRecognizerState state = longPress.state; if (indexPath.row == 0) { return; } nodeInfoCell *cell = (nodeInfoCell*)[self.nodeInfoController.collectionView cellForItemAtIndexPath:indexPath]; switch (state) { case UIGestureRecognizerStateBegan: { if(!indexPath) { return; } // [cell setHighlighted:NO]; [self.nodeInfoController openDeleteMode]; break; } default: { cell.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [cell setHighlighted:NO]; break; } } } #pragma mark - make snapshot method - (UIView *)customSnapshoFromView:(UIView *)inputView { //The method that 'snapshotViewAfterScreenUpdates' has bugs in iphone 6 and 6+ UIView *snapshot = UIView.new; // if ([inputView respondsToSelector:@selector(snapshotViewAfterScreenUpdates:)]) { //ios 7 snapshot method // snapshot = [inputView snapshotViewAfterScreenUpdates:YES]; // snapshot.layer.masksToBounds = NO; // snapshot.layer.cornerRadius = 0.0; // }else { //...make snapshot avilibile under ios7 // snapshot = [[UIView alloc]initWithFrame:inputView.frame]; // UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, inputView.opaque, 10.0); // [inputView.layer renderInContext:UIGraphicsGetCurrentContext()]; // UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext(); // UIGraphicsEndImageContext(); // UIImageView *imageView = [[UIImageView alloc]initWithImage:viewImage]; // [snapshot addSubview:imageView]; // } snapshot = [[UIView alloc]initWithFrame:inputView.frame]; UIGraphicsBeginImageContextWithOptions(inputView.bounds.size, inputView.opaque, 7.0); [inputView.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage * viewImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); UIImageView *imageView = [[UIImageView alloc]initWithImage:viewImage]; [snapshot addSubview:imageView]; snapshot.layer.shadowOffset = CGSizeMake(2.0, 2.0); snapshot.layer.shadowRadius = 1.0; snapshot.layer.shadowOpacity = 0.4; snapshot.tag = 7000; return snapshot; } #pragma mark - night mode - (void)refreshAfterOpenNightMode:(NSNotification*)noti { self.view.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; self.lineView.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; self.nodeBtnView.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; self.orderedView.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; UILabel *titleLabel = (UILabel*)[_orderedView viewWithTag:ORDEREDVIEWTAG]; titleLabel.textColor = [UIColor colorWithHexString:TextBlack]; titleLabel.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; self.leakBtn.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; self.searchBtn.backgroundColor = [UIColor colorWithHexString:BackGrayGroundColor]; [orderButtonArray enumerateObjectsUsingBlock:^(UIButton* button, NSUInteger idx, BOOL *stop) { button.backgroundColor = [UIColor colorWithHexString:BackGroundColor]; [button setTitleColor:[UIColor colorWithHexString:TextBlack] forState:UIControlStateNormal]; UIView *line = [button viewWithTag:1000]; line.backgroundColor = [UIColor colorWithHexString:LINECOLOR]; }]; } - (void)dealloc { [[NSNotificationCenter defaultCenter]removeObserver:self]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } @end