• iOS进度条显示


    一、实现下载文件进度控制

    1.代码示例

      1 #import "YYViewController.h"
      2 
      3 @interface YYViewController ()
      4 @property(nonatomic,strong)NSMutableData *fileData;
      5 @property(nonatomic,strong)NSFileHandle *writeHandle;
      6 @property(nonatomic,assign)long long currentLength;
      7 @property(nonatomic,assign)long long sumLength;
      8 @property (weak, nonatomic) IBOutlet UIProgressView *progress;
      9 
     10 - (IBAction)star;
     11 
     12 @end
     13 
     14 @implementation YYViewController
     15 
     16 - (void)viewDidLoad
     17 {
     18     [super viewDidLoad];
     19 }
     20 
     21 - (IBAction)star {
     22     
     23     
     24     //创建下载路径
     25     
     26     NSURL *url=[NSURL URLWithString:@"http://192.168.0.109:8080/MJServer/resources/video.zip"];
     27     
     28     //创建一个请求
     29     NSURLRequest *request=[NSURLRequest requestWithURL:url];
     30     
     31     //发送请求(使用代理的方式)
     32 //    NSURLConnection *connt=
     33     [NSURLConnection connectionWithRequest:request delegate:self];
     34 //    [connt start];
     35   
     36 }
     37 
     38 #pragma mark- NSURLConnectionDataDelegate代理方法
     39 /*
     40  *当接收到服务器的响应(连通了服务器)时会调用
     41  */
     42 -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
     43 {
     44     //1.创建文件存储路径
     45     NSString *caches=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
     46     NSString *filePath=[caches stringByAppendingPathComponent:@"video.zip"];
     47 
     48     
     49     
     50     //2.创建一个空的文件,到沙盒中
     51     NSFileManager *mgr=[NSFileManager defaultManager];
     52     //刚创建完毕的大小是o字节
     53     [mgr createFileAtPath:filePath contents:nil attributes:nil];
     54     
     55     //3.创建写数据的文件句柄
     56     self.writeHandle=[NSFileHandle fileHandleForWritingAtPath:filePath];
     57     
     58     //4.获取完整的文件的长度
     59     self.sumLength=response.expectedContentLength;
     60 }
     61 
     62 /*
     63  *当接收到服务器的数据时会调用(可能会被调用多次,每次只传递部分数据)
     64  */
     65 -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
     66 {
     67     //累加接收到的数据
     68     self.currentLength+=data.length;
     69     
     70     //计算当前进度(转换为double型的)
     71     double progress=(double)self.currentLength/self.sumLength;
     72     self.progress.progress=progress;
     73     
     74     //一点一点接收数据。
     75     NSLog(@"接收到服务器的数据!---%d",data.length);
     76     
     77     //把data写入到创建的空文件中,但是不能使用writeTofile(会覆盖)
     78     //移动到文件的尾部
     79     [self.writeHandle seekToEndOfFile];
     80     //从当前移动的位置,写入数据
     81     [self.writeHandle writeData:data];
     82 }
     83 
     84 /*
     85  *当服务器的数据加载完毕时就会调用
     86  */
     87 -(void)connectionDidFinishLoading:(NSURLConnection *)connection
     88 {
     89     NSLog(@"下载完毕");
     90     
     91     //关闭连接,不再输入数据在文件中
     92     [self.writeHandle closeFile];
     93     //销毁
     94     self.writeHandle=nil;
     95     
     96     //在下载完毕后,对进度进行清空
     97     self.currentLength=0;
     98     self.sumLength=0;
     99     
    100     
    101 }
    102 /*
    103  *请求错误(失败)的时候调用(请求超时断网没有网,一般指客户端错误)
    104  */
    105 -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
    106 {
    107 }
    108 @end

    2.显示

    模拟器显示:

    打印查看:

  • 相关阅读:
    设计模式之单例模式
    设计模式之组合模式
    SVN搭建简单教程
    添加Silverlight应用到HTML
    动态修改配置文件
    Ajax
    jQuery 事件方法
    Java和JavaScript对账户实现掩码并四个一组分隔
    一种简单实现当前时间是否在工作时间内的方法
    Postman接口自动化测试实例用到的完整的SM2前端加密算法代码
  • 原文地址:https://www.cnblogs.com/jx66/p/5627652.html
Copyright © 2020-2023  润新知