易聊之文件界面的构思


第二遍,易聊 之文件界面的架构

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;

    }

    

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值