374 lines
12 KiB
Objective-C
374 lines
12 KiB
Objective-C
//
|
|
// UMComPhotoAlbumViewController.m
|
|
// UMCommunity
|
|
//
|
|
// Created by umeng on 15/7/7.
|
|
// Copyright (c) 2015年 Umeng. All rights reserved.
|
|
//
|
|
|
|
#import "UMComPhotoAlbumViewController.h"
|
|
#import "UMComImageView.h"
|
|
#import <UMComDataStorage/UMComAlbum.h>
|
|
#import "UMComGridViewerController.h"
|
|
#import "UIViewController+UMComAddition.h"
|
|
#import "UMComRefreshView.h"
|
|
#import <UMComDataStorage/UMComUser.h>
|
|
#import <UMComDataStorage/UMComImageUrl.h>
|
|
#import "UMComShowToast.h"
|
|
#import <UMCommunitySDK/UMComSession.h>
|
|
#import "UMComUserAlbumDataController.h"
|
|
#import <UMComFoundation/UMComKit+Color.h>
|
|
|
|
typedef void (^AlbumLoadCompletionHandler)(NSArray *data, NSError *error);
|
|
|
|
const CGFloat A_WEEK_SECONDES = 60*60*24*7;
|
|
|
|
|
|
@interface UMComPhotoAlbumViewController ()<UICollectionViewDataSource, UICollectionViewDelegate,UICollectionViewDelegateFlowLayout>
|
|
|
|
@property (nonatomic, strong) UICollectionView *albumCollectionView;
|
|
|
|
@property (nonatomic, strong) UICollectionViewFlowLayout *layout;
|
|
|
|
@property (nonatomic, strong) NSArray *imageModelsArray;
|
|
|
|
@property (nonatomic, strong) UMComHeadView *headView;
|
|
|
|
@property (nonatomic, strong) UMComFootView *footView;
|
|
|
|
@property (nonatomic, strong) UIActivityIndicatorView *indicatorView;
|
|
|
|
@property (nonatomic, strong) UILabel *noDataTipLabel;
|
|
|
|
@property (nonatomic,strong) UIView* emptyView;//无内容时候显示的view
|
|
|
|
-(void) createEmptyView;
|
|
|
|
@property(nonatomic,strong)UMComUserAlbumDataController* dataController;
|
|
@property(nonatomic,assign)BOOL isLoadFinish;
|
|
|
|
- (void)refreshData;
|
|
|
|
- (void)refreshDataFromServer;
|
|
|
|
- (void)loadMoreData;
|
|
|
|
@end
|
|
|
|
@implementation UMComPhotoAlbumViewController
|
|
|
|
- (void)viewDidLoad {
|
|
[super viewDidLoad];
|
|
[self setTitleViewWithTitle:UMComLocalizedString(@"um_com_album", @"相册")];
|
|
|
|
self.isLoadFinish = YES;
|
|
self.dataController = [UMComUserAlbumDataController userAlbumDataControllWithUser:self.user count:UMCom_Limit_Page_Count];
|
|
|
|
if ([self.user.uid isEqualToString:[UMComSession sharedInstance].uid]) {
|
|
self.dataController.isReadLoacalData = YES;
|
|
self.dataController.isSaveLoacalData = YES;
|
|
}
|
|
|
|
UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];
|
|
layout.scrollDirection =UICollectionViewScrollDirectionVertical;
|
|
layout.minimumInteritemSpacing = 2;
|
|
layout.minimumLineSpacing = 2;
|
|
self.layout = layout;
|
|
self.albumCollectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) collectionViewLayout:layout];
|
|
self.albumCollectionView.backgroundColor = [UIColor whiteColor];
|
|
self.albumCollectionView.autoresizingMask = UIViewAutoresizingFlexibleWidth |UIViewAutoresizingFlexibleHeight;
|
|
[self.albumCollectionView registerClass:[UMComPhotoAlbumCollectionCell class] forCellWithReuseIdentifier:@"PhotoAlbumCollectionCell"];
|
|
[self.view addSubview:self.albumCollectionView];
|
|
|
|
self.indicatorView = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
|
|
self.indicatorView.center = CGPointMake(self.view.frame.size.width/2, self.view.frame.size.height/2);
|
|
self.indicatorView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
[self.view addSubview:self.indicatorView];
|
|
|
|
__weak typeof(self) weakSelf = self;
|
|
self.headView = (UMComHeadView *)[UMComHeadView refreshControllViewWithScrollView:self.albumCollectionView block:^{
|
|
[weakSelf refreshData];
|
|
}];
|
|
|
|
self.footView = (UMComFootView *)[UMComFootView refreshControllViewWithScrollView:self.albumCollectionView block:^{
|
|
[weakSelf loadMoreData];
|
|
}];
|
|
|
|
[self createEmptyView];
|
|
|
|
[self refreshData];
|
|
|
|
// Do any additional setup after loading the view from its nib.
|
|
}
|
|
|
|
|
|
- (void)creatNoFeedTip
|
|
{
|
|
UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height/2-40, self.view.frame.size.width,40)];
|
|
label.backgroundColor = [UIColor clearColor];
|
|
label.text = UMComLocalizedString(@"um_com_emptyData", @"内容为空");
|
|
label.font = UMComFontNotoSansLightWithSafeSize(17);
|
|
label.textColor = UMComColorWithHexString(FontColorGray);
|
|
label.textAlignment = NSTextAlignmentCenter;
|
|
label.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin;
|
|
label.hidden = YES;
|
|
[self.view addSubview:label];
|
|
self.noDataTipLabel = label;
|
|
}
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
[super viewWillAppear:animated];
|
|
self.albumCollectionView.delegate = self;
|
|
self.albumCollectionView.dataSource = self;
|
|
CGFloat itemWidth = (self.view.frame.size.width-8)/3;
|
|
self.layout.itemSize = CGSizeMake(itemWidth, itemWidth);
|
|
[self.albumCollectionView reloadData];
|
|
}
|
|
|
|
- (void)viewWillDisappear:(BOOL)animated
|
|
{
|
|
[super viewWillDisappear:animated];
|
|
}
|
|
|
|
|
|
- (NSArray *)imageModelsWithData:(NSArray *)data
|
|
{
|
|
NSMutableArray *imageModels = [NSMutableArray array];
|
|
for (UMComAlbum *album in data) {
|
|
if (album.image_urls.count > 0) {
|
|
[imageModels addObjectsFromArray:album.image_urls];
|
|
}
|
|
}
|
|
return imageModels;
|
|
}
|
|
|
|
|
|
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section
|
|
{
|
|
if (self.imageModelsArray.count <= 0) {
|
|
self.emptyView.hidden = NO;
|
|
}
|
|
else{
|
|
self.emptyView.hidden = YES;
|
|
}
|
|
|
|
if (self.imageModelsArray.count < 20) {
|
|
return 20;
|
|
}
|
|
return self.imageModelsArray.count;
|
|
}
|
|
|
|
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
|
|
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
UMComPhotoAlbumCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"PhotoAlbumCollectionCell" forIndexPath:indexPath];
|
|
if (indexPath.row < self.imageModelsArray.count) {
|
|
UMComImageUrl *imageModel = self.imageModelsArray[indexPath.row];
|
|
[cell.imageView setImageURL:imageModel.small_url_string placeHolderImage:UMComImageWithImageName(@"image-placeholder")];
|
|
}else{
|
|
cell.imageView.image = nil;
|
|
}
|
|
return cell;
|
|
}
|
|
|
|
- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
if (indexPath.row >= self.imageModelsArray.count) {
|
|
return;
|
|
}
|
|
UMComGridViewerController *viewerController = [[UMComGridViewerController alloc] initWithArray:self.imageModelsArray index:indexPath.row];
|
|
[viewerController setCacheSecondes:A_WEEK_SECONDES];
|
|
[self presentViewController:viewerController animated:YES completion:nil];
|
|
}
|
|
|
|
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath
|
|
{
|
|
CGFloat itemWidth = (self.view.frame.size.width-8)/3;
|
|
CGSize itemSize = CGSizeMake(itemWidth, itemWidth);
|
|
return itemSize;
|
|
}
|
|
|
|
|
|
- (void)dealloc
|
|
{
|
|
self.albumCollectionView.delegate = nil;
|
|
self.albumCollectionView.dataSource = nil;
|
|
self.albumCollectionView = nil;
|
|
self.headView = nil;
|
|
self.footView = nil;
|
|
}
|
|
|
|
|
|
- (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) createEmptyView
|
|
{
|
|
self.emptyView = [[UIView alloc] initWithFrame:self.view.bounds];
|
|
|
|
UILabel *noticellabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, self.emptyView.bounds.size.width, 40)];
|
|
noticellabel.text = UMComLocalizedString(@"um_com_emptyData", @"暂时没有内容哦!");
|
|
noticellabel.center = CGPointMake(self.emptyView.frame.size.width/2, self.emptyView.frame.size.height/2 );
|
|
noticellabel.textAlignment = NSTextAlignmentCenter;
|
|
noticellabel.font = UMComFontNotoSansLightWithSafeSize(20);
|
|
noticellabel.textColor = UMComColorWithHexString(@"#A5A5A5");
|
|
noticellabel.backgroundColor = [UIColor whiteColor];
|
|
noticellabel.alpha = 1;
|
|
[self.emptyView addSubview:noticellabel];
|
|
|
|
[self.albumCollectionView addSubview:self.emptyView];
|
|
|
|
self.emptyView.hidden = YES;
|
|
}
|
|
|
|
|
|
#pragma mark - data request
|
|
|
|
- (void)handleLocalData:(NSArray *)data error:(NSError *)error
|
|
{
|
|
self.dataController.haveNextPage = NO;
|
|
self.dataController.canVisitNextPage = NO;
|
|
self.dataController.nextPageUrl = nil;
|
|
[self.dataController.dataArray removeAllObjects];
|
|
if ([data isKindOfClass:[NSArray class]] && data.count >0) {
|
|
[self.dataController.dataArray addObjectsFromArray:data];
|
|
}
|
|
|
|
if (!error) {
|
|
NSMutableArray *tempArr = [NSMutableArray arrayWithArray:self.imageModelsArray];
|
|
[tempArr addObjectsFromArray:[self imageModelsWithData:data]];
|
|
self.imageModelsArray = tempArr;
|
|
[self.albumCollectionView reloadData];
|
|
}
|
|
}
|
|
|
|
- (void) fetchLocalData
|
|
{
|
|
__weak typeof(self) weakSelf = self;
|
|
[self.dataController fetchLocalDataWithCompletion:^(NSArray *dataArray, NSError *error) {
|
|
|
|
if (dataArray && [dataArray isKindOfClass:[NSArray class]] && dataArray.count > 0) {
|
|
|
|
[weakSelf handleLocalData:dataArray error:error];
|
|
|
|
}
|
|
[weakSelf refreshDataFromServer];
|
|
}];
|
|
}
|
|
|
|
-(void) refreshData
|
|
{
|
|
if (self.dataController.isReadLoacalData) {
|
|
//设置NO只会第一次下拉刷新取本地数据
|
|
self.dataController.isReadLoacalData = NO;
|
|
//取本地数据的话,就不需要显示loadMoreStatusView的views
|
|
[self fetchLocalData];
|
|
}
|
|
else{
|
|
[self refreshDataFromServer];
|
|
}
|
|
}
|
|
|
|
-(void)refreshDataFromServer
|
|
{
|
|
if (self.isLoadFinish == NO) {
|
|
return;
|
|
}
|
|
self.isLoadFinish = NO;
|
|
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
|
|
__weak typeof(self) weakSelf = self;
|
|
[self.dataController refreshNewDataCompletion:^(NSArray *data, NSError *error) {
|
|
[UMComShowToast showFetchResultTipWithError:error];
|
|
if (!error && [data isKindOfClass:[NSArray class]] && data.count <= 0) {
|
|
weakSelf.emptyView.hidden = NO;
|
|
}
|
|
else{
|
|
weakSelf.emptyView.hidden = YES;
|
|
}
|
|
[weakSelf.indicatorView stopAnimating];
|
|
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
|
|
if (!error && [data isKindOfClass:[NSArray class]]) {
|
|
weakSelf.imageModelsArray = [weakSelf imageModelsWithData:data];
|
|
}
|
|
weakSelf.isLoadFinish = YES;
|
|
[weakSelf.headView endLoading];
|
|
//如果没有下一页 则不显示下拉刷新
|
|
if (weakSelf.dataController.haveNextPage) {
|
|
[weakSelf.footView endLoading];
|
|
}else{
|
|
[weakSelf.footView noMoreData];
|
|
}
|
|
[weakSelf.albumCollectionView reloadData];
|
|
}];
|
|
|
|
}
|
|
|
|
- (void)loadMoreData
|
|
{
|
|
if (self.isLoadFinish == NO) {
|
|
return;
|
|
}
|
|
if (!self.dataController.haveNextPage) {
|
|
[self.footView noMoreData];
|
|
return;
|
|
}
|
|
self.isLoadFinish = NO;
|
|
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
|
|
__weak typeof(self) weakSelf = self;
|
|
[self.dataController loadNextPageDataWithCompletion:^(NSArray *data, NSError *error) {
|
|
[UMComShowToast showFetchResultTipWithError:error];
|
|
if (!error) {
|
|
NSMutableArray *tempArr = [NSMutableArray arrayWithArray:weakSelf.imageModelsArray];
|
|
[tempArr addObjectsFromArray:[weakSelf imageModelsWithData:data]];
|
|
weakSelf.imageModelsArray = tempArr;
|
|
}
|
|
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
|
|
weakSelf.isLoadFinish = YES;
|
|
if (weakSelf.dataController.haveNextPage) {
|
|
[weakSelf.footView endLoading];
|
|
}else{
|
|
[weakSelf.footView noMoreData];
|
|
}
|
|
[weakSelf.albumCollectionView reloadData];
|
|
}];
|
|
}
|
|
|
|
@end
|
|
|
|
|
|
|
|
|
|
@implementation UMComPhotoAlbumCollectionCell
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame
|
|
{
|
|
self = [super initWithFrame:frame];
|
|
if (self) {
|
|
CGFloat imageWidth = frame.size.width;
|
|
self.imageView = [[[UMComImageView imageViewClassName] alloc] initWithFrame:CGRectMake(0, 0, imageWidth, imageWidth)];
|
|
self.imageView.needCutOff = YES;
|
|
[self.contentView addSubview:self.imageView];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
@end
|