475 lines
16 KiB
Objective-C
475 lines
16 KiB
Objective-C
//
|
||
// IfishLiveListViewController.m
|
||
// CollectionViewTest
|
||
//
|
||
// Created by imac on 17/3/27.
|
||
// Copyright © 2017年 xiang. All rights reserved.
|
||
//
|
||
|
||
#import "IfishLiveListViewController.h"
|
||
#import "IfishLiveListViewCell.h"
|
||
#import "ZWCollectionViewFlowLayout.h"
|
||
#import "KankanListCollectionViewCell.h"
|
||
#import "JHRefresh.h"
|
||
#import "IfishP2PLivePlayViewController.h"
|
||
#import "ifishLiveListAdViewCell.h"
|
||
|
||
@interface IfishLiveListViewController ()<ZWwaterFlowDelegate>
|
||
{
|
||
ZWCollectionViewFlowLayout *_flowLayout;//自定义layout
|
||
BOOL _isRefreshing;
|
||
BOOL _isLoadMore;
|
||
|
||
}
|
||
|
||
@property (nonatomic,strong) NSMutableArray *bannerDataArr;
|
||
@property(nonatomic)BOOL isRefreshing;
|
||
@property(nonatomic)BOOL isLoadMore;
|
||
@property(nonatomic,strong) NSIndexPath *selectIndexPath;
|
||
|
||
@end
|
||
|
||
@implementation IfishLiveListViewController
|
||
static NSString * const reuseAdViewIdentifier = @"ifishLiveListAdViewCell";
|
||
static NSString * const cellIdentifier = @"KankanListCollectionViewCell";
|
||
const float listPageSize = 10.0f;
|
||
|
||
- (instancetype)init {
|
||
//初始化自定义layout
|
||
//_flowLayout = [[ZWCollectionViewFlowLayout alloc] init];
|
||
//_flowLayout.colMagrin = 5;
|
||
//_flowLayout.rowMagrin = 5;
|
||
//_flowLayout.sectionInset = UIEdgeInsetsMake(5, 5, 5, 5);
|
||
//_flowLayout.colCount = 2;
|
||
//_flowLayout.degelate = self;
|
||
//self = [self initWithCollectionViewLayout:_flowLayout];
|
||
|
||
UICollectionViewFlowLayout *flow = [[UICollectionViewFlowLayout alloc] init];
|
||
flow.minimumLineSpacing = 1;
|
||
flow.minimumInteritemSpacing = .1;
|
||
|
||
CGFloat width = (kScreenSize.width-15*2*KWidth_Scale -10)/2;
|
||
CGFloat itemH = width *0.61;
|
||
flow.itemSize = CGSizeMake(width,itemH);
|
||
self = [self initWithCollectionViewLayout:flow];
|
||
if (self) {
|
||
// insert code here...
|
||
}
|
||
return self;
|
||
}
|
||
|
||
- (void)viewDidLoad{
|
||
|
||
[super viewDidLoad];
|
||
_dataArray = [[NSMutableArray alloc] init];
|
||
_bannerDataArr = [[NSMutableArray alloc] init];
|
||
_currentPage =0.0;
|
||
self.collectionView.backgroundColor = RGB(242, 242, 242);
|
||
//注册显示cell的类型
|
||
[self.collectionView registerClass:[ifishLiveListAdViewCell class] forCellWithReuseIdentifier:reuseAdViewIdentifier];
|
||
[self.collectionView registerClass:[KankanListCollectionViewCell class] forCellWithReuseIdentifier:cellIdentifier];
|
||
UINib *cellNib=[UINib nibWithNibName:@"KankanListCollectionViewCell" bundle:nil];
|
||
[self.collectionView registerNib:cellNib forCellWithReuseIdentifier:cellIdentifier];
|
||
UINib *adcellNib=[UINib nibWithNibName:@"ifishLiveListAdViewCell" bundle:nil];
|
||
[self.collectionView registerNib:adcellNib forCellWithReuseIdentifier:reuseAdViewIdentifier];
|
||
|
||
[self.collectionView registerClass:[UICollectionReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionFooter withReuseIdentifier:@"reusablePlaceHoldfooterView"];
|
||
|
||
// Do any additional setup after loading the view.
|
||
[self creatReatRefreshView];
|
||
self.userId = [dataContorl dataControlGetUserIdInfo];
|
||
[self loadNewBannerData];
|
||
|
||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(liveRoomDataDidChange:) name:@"liveRoomDataDidChange" object:nil];
|
||
|
||
}
|
||
|
||
-(void)dealloc{
|
||
|
||
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"liveRoomDataDidChange" object:nil];
|
||
}
|
||
|
||
#pragma mark - 刷新 加载时更多
|
||
-(void)creatReatRefreshView{
|
||
__weak typeof (self)weskSelf=self;
|
||
// 下拉刷新
|
||
|
||
[weskSelf.collectionView addRefreshHeaderViewWithAniViewClass:[JHRefreshAmazingAniView class] beginRefresh:^{
|
||
|
||
if (weskSelf.isRefreshing) {
|
||
return ;
|
||
}
|
||
weskSelf.isRefreshing=YES;
|
||
_currentPage = 0;
|
||
NSInteger firstResult = 0;
|
||
NSInteger pageSize = listPageSize ;
|
||
[weskSelf initDataWithFirst:firstResult pageSize:pageSize isRefresh:YES];
|
||
|
||
}];
|
||
|
||
//上拉加载更多
|
||
|
||
[weskSelf.collectionView addRefreshFooterViewWithAniViewClass:[JHRefreshCommonAniView class] beginRefresh:^{
|
||
|
||
if (weskSelf.isLoadMore) {
|
||
return ;
|
||
}
|
||
weskSelf.isLoadMore=YES;
|
||
int pagecount =[self.total floatValue]/listPageSize + 1;
|
||
NSLog(@"page:::::**** %d",pagecount);
|
||
|
||
if (_currentPage>=pagecount) {
|
||
[weskSelf.view makeToast:@"已经全部加载完毕"];
|
||
[weskSelf endRefreshing];
|
||
}
|
||
|
||
}];
|
||
}
|
||
|
||
#pragma mark -刷新
|
||
-(void)initDataWithFirst:(NSInteger)firstResult pageSize:(NSInteger)pageSize isRefresh:(BOOL)isRefres{}
|
||
|
||
-(void)endRefreshing{
|
||
|
||
if (self.isRefreshing) {
|
||
self.isRefreshing=NO;
|
||
[self.collectionView headerEndRefreshingWithResult:JHRefreshResultNone];
|
||
}
|
||
|
||
if (self.isLoadMore) {
|
||
self.isLoadMore=NO;
|
||
[self.collectionView footerEndRefreshing];
|
||
}
|
||
}
|
||
|
||
#pragma mark -v4.1 后看看banner
|
||
-(void)loadNewBannerData{
|
||
|
||
__weak typeof (self)weskSelf=self;
|
||
[AFHttpTool getIfishBannerData:IfishAdTypeKankan success:^(id response) {
|
||
NSDictionary *reDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil];
|
||
if ([reDic[@"result"] isEqualToString:@"100"]){
|
||
NSArray*bannerArr=reDic[@"data"];
|
||
for (NSDictionary *bannerDic in bannerArr) {
|
||
IfishBannerData *banner=[[IfishBannerData alloc] initWithDict:bannerDic];
|
||
|
||
[_bannerDataArr addObject:banner];
|
||
}
|
||
NSIndexSet *set = [NSIndexSet indexSetWithIndex:0];
|
||
[weskSelf.collectionView reloadSections:set];
|
||
}
|
||
|
||
} failure:^(NSError *err) {
|
||
|
||
}];
|
||
|
||
}
|
||
|
||
- (void)didReceiveMemoryWarning {
|
||
[super didReceiveMemoryWarning];
|
||
// Dispose of any resources that can be recreated.
|
||
}
|
||
|
||
/*
|
||
#pragma mark - Navigation
|
||
|
||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
||
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
|
||
// Get the new view controller using [segue destinationViewController].
|
||
// Pass the selected object to the new view controller.
|
||
}
|
||
*/
|
||
- (void)viewWillAppear:(BOOL)animated{
|
||
[super viewWillAppear:animated];
|
||
NSLog(@"------------------------------%@ viewWillAppear",[self class]);
|
||
NSLog(@"type%lu",(unsigned long)self.listType);
|
||
}
|
||
|
||
- (void)viewDidAppear:(BOOL)animated {
|
||
[super viewDidAppear:animated];
|
||
NSLog(@"------------------------------%@ viewDidAppear",[self class]);
|
||
}
|
||
|
||
|
||
#pragma mark <UICollectionViewDataSource>
|
||
|
||
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
|
||
|
||
return 2;
|
||
}
|
||
|
||
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
|
||
if (section==0) {
|
||
return 1;
|
||
}
|
||
return self.dataArray.count;
|
||
}
|
||
|
||
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||
|
||
if (indexPath.section ==0) {
|
||
ifishLiveListAdViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:reuseAdViewIdentifier forIndexPath:indexPath];
|
||
cell.backgroundColor = [UIColor redColor];
|
||
if (_bannerDataArr.count !=0) {
|
||
NSArray *ads =self.bannerDataArr;
|
||
NSMutableArray *imgs = [[NSMutableArray alloc] init];
|
||
[ads enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
||
if ([obj isKindOfClass:[IfishBannerData class]]) {
|
||
IfishBannerData *banner = (IfishBannerData *)obj;
|
||
[imgs addObject:banner.adImage];
|
||
}
|
||
|
||
}];
|
||
|
||
cell.adView.adList = imgs;
|
||
__weak typeof (self)weakSelf = self;
|
||
cell.adView.tapActionBlock =^(LXAdScrollView *adScrollView) {
|
||
IfishBannerData *bdata = _bannerDataArr[adScrollView.currentPage];
|
||
[weakSelf tapAdWithLink:bdata.adLink];
|
||
};
|
||
|
||
}else{
|
||
//默认加载本地
|
||
cell.adView.adList = @[@"kankan_listbanner.jpg"];
|
||
cell.adView.tapActionBlock =^(LXAdScrollView *adScrollView) {
|
||
|
||
};
|
||
}
|
||
|
||
return cell;
|
||
}
|
||
|
||
KankanListCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];
|
||
IfishKankanListModel*model = _dataArray[indexPath.row];
|
||
[cell loadDataAt:indexPath withListModel:model];
|
||
return cell;
|
||
|
||
}
|
||
|
||
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
|
||
{
|
||
if (indexPath.section==0) {
|
||
return CGSizeMake(self.view.frame.size.width, self.view.frame.size.width*0.427);
|
||
}else{
|
||
CGFloat width = (self.view.frame.size.width-15*2*KWidth_Scale - 10)/2;
|
||
CGFloat itemH = width *0.61;
|
||
CGSize itemSize = CGSizeMake(width,itemH);
|
||
return itemSize;
|
||
}
|
||
}
|
||
|
||
//距离上下左右的间距
|
||
-(UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section
|
||
{
|
||
|
||
if (section == 0) {
|
||
|
||
return UIEdgeInsetsMake(0,0,0, 0);
|
||
}
|
||
|
||
return UIEdgeInsetsMake(5, 15*KWidth_Scale, 5, 15*KWidth_Scale);
|
||
}
|
||
|
||
|
||
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section
|
||
{
|
||
//设置最小的列间距
|
||
if (section == 1) {
|
||
|
||
return 5.0f;
|
||
}
|
||
|
||
return 0.0f;
|
||
}
|
||
|
||
-(CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section
|
||
{
|
||
//设置最小的行间距
|
||
|
||
if (section == 1) {
|
||
|
||
return 10.0f;
|
||
}
|
||
return 0.0f;
|
||
}
|
||
#pragma mark 加载脚步视图
|
||
- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath{
|
||
|
||
if (indexPath.section == 1) {
|
||
|
||
if (kind == UICollectionElementKindSectionFooter){
|
||
//空白脚视图防治内容tab栏遮挡
|
||
UICollectionReusableView *reusablefooterView = [collectionView dequeueReusableSupplementaryViewOfKind:kind withReuseIdentifier:@"reusablePlaceHoldfooterView" forIndexPath:indexPath];
|
||
|
||
return reusablefooterView;
|
||
|
||
}else{
|
||
|
||
return nil;
|
||
|
||
}
|
||
}else{
|
||
|
||
return nil;
|
||
}
|
||
}
|
||
|
||
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForFooterInSection:(NSInteger)section{
|
||
|
||
if (section==1) {
|
||
|
||
return CGSizeMake(kScreenSize.width, 60);
|
||
}
|
||
return CGSizeZero;
|
||
}
|
||
|
||
#pragma mark <UICollectionViewDelegate>
|
||
|
||
/*
|
||
// Uncomment this method to specify if the specified item should be highlighted during tracking
|
||
- (BOOL)collectionView:(UICollectionView *)collectionView shouldHighlightItemAtIndexPath:(NSIndexPath *)indexPath {
|
||
return YES;
|
||
}
|
||
*/
|
||
|
||
/*
|
||
// Uncomment this method to specify if the specified item should be selected
|
||
- (BOOL)collectionView:(UICollectionView *)collectionView shouldSelectItemAtIndexPath:(NSIndexPath *)indexPath {
|
||
return YES;
|
||
}
|
||
*/
|
||
|
||
/*
|
||
// Uncomment these methods to specify if an action menu should be displayed for the specified item, and react to actions performed on the item
|
||
- (BOOL)collectionView:(UICollectionView *)collectionView shouldShowMenuForItemAtIndexPath:(NSIndexPath *)indexPath {
|
||
return NO;
|
||
}
|
||
|
||
- (BOOL)collectionView:(UICollectionView *)collectionView canPerformAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
|
||
return NO;
|
||
}
|
||
|
||
- (void)collectionView:(UICollectionView *)collectionView performAction:(SEL)action forItemAtIndexPath:(NSIndexPath *)indexPath withSender:(id)sender {
|
||
|
||
}
|
||
*/
|
||
|
||
#pragma mark UICollectionViewDelegate
|
||
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
|
||
{
|
||
self.selectIndexPath = indexPath;
|
||
IfishKankanListModel *listModel=self.dataArray[indexPath.row];
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:@"childlistViewDidselect" object:listModel];
|
||
|
||
}
|
||
|
||
#pragma mark - banner 点击事件
|
||
|
||
-(void)tapAdWithLink:(NSString *)pushlink
|
||
{
|
||
if (![pushlink isKindOfClass:[NSNull class]] && pushlink &&![pushlink isEqualToString:@""]) {
|
||
|
||
[[NSNotificationCenter defaultCenter] postNotificationName:@"childlistViewDidselectadView" object:pushlink];
|
||
|
||
}
|
||
}
|
||
|
||
#pragma mark UIScrollViewDelegate
|
||
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
|
||
{
|
||
//[[NSNotificationCenter defaultCenter] postNotificationName:@"childlistViewDidScroll" object:scrollView];
|
||
|
||
[self thredshold:0.7f intemPerPage:10 currentPage:_currentPage scrollViewDidScroll:scrollView];
|
||
|
||
}
|
||
|
||
//当前页面已经划过了 70% 的时候,就请求新的资源,加载数据 thredshold 设置为70% 并不是单页 70%
|
||
//上拉预加载
|
||
-(void)thredshold:(CGFloat)thredshold intemPerPage:(CGFloat)pageSize currentPage:(CGFloat)currentPage
|
||
scrollViewDidScroll:(UIScrollView *)scrollView
|
||
{
|
||
CGFloat current = scrollView.contentOffset.y + scrollView.frame.size.height;
|
||
CGFloat total = scrollView.contentSize.height;
|
||
CGFloat ratio = current / total;
|
||
CGFloat needRead = pageSize * thredshold + currentPage * pageSize;
|
||
CGFloat totalItem = pageSize * (currentPage + 1);
|
||
CGFloat newThreshold = needRead / totalItem;
|
||
|
||
if (ratio >= newThreshold){
|
||
|
||
//request moredata
|
||
// _currentPage 初始值0 注意最后一页划过%70 后_currentPage 值突变当. 。
|
||
|
||
int pagecount =[self.total floatValue]/listPageSize + 1;
|
||
if (_currentPage<pagecount) {
|
||
_currentPage += 1;
|
||
NSInteger firstSize = (currentPage +1)*pageSize;
|
||
[self loadmoredata:firstSize pageSize:pageSize];
|
||
NSLog(@"*****----*****%f",_currentPage);
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
#pragma mark -加载更多
|
||
-(void)loadmoredata:(NSInteger)firstResult pageSize:(NSInteger)pageSize{
|
||
|
||
NSString *oderType = [NSString stringWithFormat:@"%lu",(unsigned long)self.listType];
|
||
__weak typeof (self)weskSelf=self;
|
||
[AFHttpTool ifishGetliveRooms:firstResult pageSize:pageSize userId:weskSelf.userId orderType:oderType success:^(id response) {
|
||
NSDictionary *reDic=[NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil];
|
||
if ([reDic[@"result"] isEqualToString:@"100"]){
|
||
|
||
self.total =reDic[@"total"];
|
||
NSArray*roomArr=reDic[@"data"];
|
||
for (NSDictionary *dic in roomArr) {
|
||
IfishKankanListModel *mode=[[IfishKankanListModel alloc] initWithDict:dic];
|
||
[_dataArray addObject:mode];
|
||
}
|
||
[weskSelf.collectionView reloadData];
|
||
}
|
||
|
||
|
||
} failure:^(NSError *err) {
|
||
|
||
}];
|
||
|
||
}
|
||
|
||
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
|
||
|
||
|
||
}
|
||
|
||
#pragma mark ZWwaterFlowDelegate
|
||
- (CGFloat)ZWwaterFlow:(ZWCollectionViewFlowLayout *)waterFlow heightForWidth:(CGFloat)width atIndexPath:(NSIndexPath *)indexPach
|
||
{
|
||
if (indexPach.section==1) {
|
||
return (270*KWidth_Scale-3*5)/2;
|
||
}
|
||
return self.view.frame.size.width*0.427;
|
||
}
|
||
|
||
//-(void)childlistscrollViewDidScroll:(NSNotification *)notify
|
||
//{
|
||
// NSString *canscroll = [notify object];
|
||
// if ([canscroll isEqualToString:@"cannotscroll"]) {
|
||
// self.collectionView.scrollEnabled = NO;
|
||
// }else{
|
||
// self.collectionView.scrollEnabled = YES;
|
||
// }
|
||
//}
|
||
|
||
#pragma mark -liveRoomDataDidChange
|
||
-(void)liveRoomDataDidChange:(NSNotification *)notify
|
||
{
|
||
IfishKankanListModel *changedModel=[notify object];
|
||
NSLog(@"更新点赞数***:%d",changedModel.zanNumber);
|
||
NSLog(@"更新点打赏***:%f",changedModel.goldValue);
|
||
|
||
[self.dataArray replaceObjectAtIndex:self.selectIndexPath.row withObject:changedModel];
|
||
|
||
}
|
||
|
||
@end
|