第二遍,易聊 之文件界面的架构
1. 通过 tabbar 的视图控制器导航来到主页面
两个数据源数组,通过 segmentControl 进行切换
1. scrollView 与 segment 绑定到一块, scrollView 的大小是 contentCGsize = CGSizeMake (320 *2, 480-64-49);
#pragma mark--1.橘黄色 2. 黑色 --为啥黑色(_scrollView添加的是collection.view,所以要看collection.view)
// [_bgScro addSubview:vc.view];
2. 数据源是通过集成表实现的, 自定义 UICollectionViewController ,并初始化时,加上数据源数组
-(id)initWithArr:(NSMutableArray *)arr layout:(UICollectionViewFlowLayout *)layout
{
self =[super initWithCollectionViewLayout:layout];
if (self) {
_totalArr = arr;
}
return self;
}
,这个数组通过三木运算符方式传递过去,CollectionVC * collection = [[CollectionVC alloc]initWithArr:i?_pubArr:_perArr layout:flowLayOut]; 这样把数据源数组从 FileVC界面传递到UICollectionViewController里面,
3. 自定义UICollectionViewCell 在自定义 UICollectionViewController里进行 注册,
4.自定义按钮里 ------让按钮点击改变状态
#import <UIKit/UIKit.h>
typedef NS_ENUM(NSInteger, ButtonState)
{// Button 的四种状态
ButtonStateNormal,//下载
ButtonStateDowning,//正在下载
ButtonStatePause,//暂停
ButtonStateComplete,//查看
};
@interface Btn : UIButton
//做一下记录,当前的 button 状态
@property(nonatomic,assign)ButtonState currentBut;
@end
5.回到 cell.customBtn 里,点击按钮时,绑定的方法
这里
-(void)btnClick:(Btn *)btn
{
switch (btn.currentBtn) {
case ButtonStateNormal:
//点击后,开始下载
btn.currentBtn = ButtonStateDowning;
break;
case ButtonStateDowning:
//点击后,暂停
btn.currentBtn = ButtonStatePause;
break;
case ButtonStatePause:
//点击后,继续下载
btn.currentBtn = ButtonStateDowning;
break;
case ButtonStateComplete:
//点击后查看,跳转页面
#warning mark--赋值完毕重写 set 方法,因为描述了,(set get 方法)(取值是get方法)
break;
default:
break;
}
}
6. 返回到自定义按钮里,重写 set 方法//重写 set方法
-(void)setCurrentBtn:(ButtonState)currentBtn
{
switch (currentBtn) {
case ButtonStateNormal:
//改变标题
[self setTitle:@"下载" forState: UIControlStateNormal];
break;
case ButtonStateDowning:
//改变标题
[self setTitle:@"正在下载" forState: UIControlStateNormal];
break;
case ButtonStatePause:
//改变标题
[self setTitle:@"暂停" forState: UIControlStateNormal];
break;
case ButtonStateComplete:
//改变标题
[self setTitle:@"查看" forState: UIControlStateNormal];
break;
default:
break;
}
}
#####此时运行后 点击按钮后,再次点击, button 状态不改变, 少一句话_currentBtn = currentBtn; 把改变的 button 状态再传过去,
7.bbb
点击 下载按钮 开始下载文件
//下载文件---(下载文件是根据--资源路径url进行下载的)
//需要注意,创建下载文件的路径
-(void)downloadWithUrl:(NSString *)urlStr Name:(NSString *)name
{
//1.创建请求的对象
NSURL * url = [NSURL URLWithString:urlStr];
//2.设置下载文件 保存的路径
[self createPath];//先做判断,再创建二级目录
//开始创建一级目录
NSString * downPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/downloadFi le"];
NSString * tempPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/temploadFile"];
_req= [ASIFormDataRequest requestWithURL:url];
_req.downloadDestinationPath =[NSString stringWithFormat:@"%@/%@",downPath,name];
_req.temporaryFileDownloadPath = [NSString stringWithFormat:@"%@/%@",tempPath,name];
_req.allowResumeForFileDownloads = YES;
// 发送网络请求
[_req startAsynchronous];
[_req setCompletionBlock:^{
//注册一个通知,当下载完毕了通知按钮改变状态
NSLog(@"下载完毕");
[[NSNotificationCenter defaultCenter]postNotificationName:@"finish" object:self];
}];
}
7.aaa//创建二级目录
-(void)createPath
{
NSString * downPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/downloadFi le"];
NSString * tempPath = [NSHomeDirectory()stringByAppendingString:@"/Documents/temploadFile"];
//如果存在就返回,不存在再创建----临时的目录
if ([[NSFileManager defaultManager]fileExistsAtPath:tempPath]) {
return;
}else{
[[NSFileManager defaultManager] createDirectoryAtPath:tempPath withIntermediateDirectories:YES attributes:nil error:nil];
}
//如果存在就返回,不存在再创建----最终的目录
if ([[NSFileManager defaultManager]fileExistsAtPath:downPath]) {
return;
}else{
[[NSFileManager defaultManager] createDirectoryAtPath:downPath withIntermediateDirectories:YES attributes:nil error:nil];
}
}
6.2222此时的6-(void)btnClick:(Btn *)btn
{
FileModel * model = _arr[btn.tag];
switch (btn.currentBtn) {
case ButtonStateNormal:
{
//点击后,开始下载
[_engine downloadWithUrl:model.url Name:model.name];//2.
btn.currentBtn = ButtonStateDowning;
}
break;
case ButtonStateDowning:
{ //点击后,暂停
[_engine stopDownLoad];//2.
btn.currentBtn = ButtonStatePause;
}
break;
case ButtonStatePause:
{ //点击后,继续下载
[_engine downloadWithUrl:model.url Name:model.name];//2.
btn.currentBtn = ButtonStateDowning;
}
break;
case ButtonStateComplete:
{ //点击后查看,跳转页面
DetailFileVC * vc = [[DetailFileVC alloc]init];
[self presentViewController:vc animated:YES completion:nil];
}
#warning mark-- 1. 赋值完毕重写 set 方法,因为描述了,(set get 方法)(取值是get方法)
break;
default:
break;
}
}