Initial commit
This commit is contained in:
+474
@@ -0,0 +1,474 @@
|
||||
//
|
||||
// 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
|
||||
Reference in New Issue
Block a user