//
//  ViewController.m
//  下载进度
//
//  Created by Super on 14/7/4.
//  Copyright (c) 2014年 iOS. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <NSURLSessionDownloadDelegate>
@property (nonatomic, strong) NSURLSession *session;

@property (nonatomic, strong) NSURLSessionDownloadTask *downloadTask;

@property (nonatomic, strong) NSData *data;

@property (weak, nonatomic) IBOutlet UIProgressView *processView;
@end
@implementation ViewController

- (NSURLSession *)session{
    if (_session == nil) {
        //代理方法运行的队列
        NSOperationQueue *queue =  [NSOperationQueue mainQueue];
//        //最大的并发线程数  ???????
        //在NSURLSession中使用NSOperationQueue设置最大并发数,无效
//        queue.maxConcurrentOperationCount = 1;
       
       
        NSURLSessionConfiguration *conf = [NSURLSessionConfiguration defaultSessionConfiguration];
        //创建自定义session  设置代理
        //session  会话
        _session = [NSURLSession sessionWithConfiguration:conf delegate:self delegateQueue:queue];
    }
    return _session;
}

//开始下载
- (IBAction)start:(id)sender {
    [self download];
}

//暂停pause 下载
- (IBAction)pause:(id)sender {
   
//    [self.downloadTask cancel];
   
    NSLog(@"zan ting");
    //取消下载,并且存储当前下载的数据
    [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {
        self.data = resumeData;
    }];
    //如果点击多次暂停 会出问题  无法继续(因为 点击多次暂停的话 resumeData 为空)
    self.downloadTask = nil;
  
}
//继续下载
- (IBAction)resume:(id)sender {
    if (self.data == nil) {
        NSLog(@"没有要继续的数据");
        return;
    }
   
    [[self.session downloadTaskWithResumeData:self.data] resume];
   
    self.data = nil;
}
- (void)download{
//    NSString *strUrl = @"http://127.0.0.1/A02-head.mp4";
    NSString *strUrl = @"http://dlsw.baidu.com/sw-search-sp/soft/9d/25765/sogou_mac_31.1421982306.dmg";
    strUrl = [strUrl stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURL *url = [NSURL URLWithString:strUrl];
    //使用代理的话,不能用此方法 
//    [[self.session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
//        NSLog(@"---%@",[NSThread currentThread]);
//    }] resume];
   
    //执行代理方法
    self.downloadTask = [self.session downloadTaskWithURL:url];
    [self.downloadTask resume];
//     [[self.session downloadTaskWithURL:url] resume];
}

//代理的方法

 
//下载完成  —————>>>  didFinishDownloadingToURL
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{
    NSLog(@"over");
}
//断点续传    ————>>>  didResumeAtOffset
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{
    NSLog(@"==");
}
//进度
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    NSLog(@"---%@",[NSThread currentThread]);

//    [NSThread sleepForTimeInterval:0.1];
    //bytesWritten 本次下载了多少
    //totalBytesWritten  总共下载了多少
    //totalBytesExpectedToWrite  文件的大小
    float process = totalBytesWritten * 1.0 / totalBytesExpectedToWrite;
    NSLog(@"%f", process);
    self.processView.progress = process;
   
}

 
@end

supersr--NSURLSessionConfiguration-下载进度的更多相关文章

  1. 使用NSURLSessionDownloadTask实现大文件下载-监听下载进度

    - 5.1 涉及知识点(1)创建NSURLSession并设置代理,通过NSURLSessionDownloadTask并以代理的方式来完成大文件的下载 //1.创建NSURLSession,设置代理 ...

  2. iOS空心圆下载进度指示器控件

    self.layer = [CAShapeLayer layer]; self.layer.frame = CGRectMake(, , , ); self.layer.position = self ...

  3. IOS下载查看PDF文件(有下载进度)

    IOS(object-c) 下载查看 PDF 其实还是蛮容易操作的.在下载前,首先要把 IOS 可以保存文件的目录给过一遍: IOS 文件保存目录 IOS 可以自定义写入的文件目录,是很有限的,只能是 ...

  4. 使用AsyncTask实现文件下载并且在状态中显示下载进度

    2013年10月24日 上班的第二天 昨天我是用afinal完成的则个功能,但是公司里并不希望使用第三方的代码,所以要求我在不使用第三方开源项目的情况下实现. 最先我是使用Thread开启一个子线程, ...

  5. iOS异步下载下载进度条显示

    说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLRequest  委托是 NSURLConnectionDo ...

  6. iOSQuartz2D-02-绘制炫酷的下载进度条

    效果图 实现思路 要实现绘图,通常需要自定义一个UIView的子类,重写父类的- (void)drawRect:(CGRect)rect方法,在该方法中实现绘图操作 若想显示下载进度,只需要实例化自定 ...

  7. PHP持续保有长连接,利用flush持续更新浏览器UI,下载进度条实现

    如何用PHP+JS实现上传进度条,大部分的人可能都实现过,但是下载呢?如何呢?原理也是差不多的,就是分次读写,每次读多少字节,但是这样的不好就是长连接,一般实现下载进度条常用的两种解决方案是:一种是需 ...

  8. OC - 9.使用Quartz2D绘制下载进度条

    效果图 实现思路 要实现绘图,通常需要自定义一个UIView的子类,重写父类的- (void)drawRect:(CGRect)rect方法,在该方法中实现绘图操作 若想显示下载进度,只需要实例化自定 ...

  9. ios专题 - 异步下载加下载进度显示

    [罗国强原创] 今天被刺激了,愤概地要写下这边博文. 说到http异步下载,首先要知道其中的关键类. 关键类是NSURLConnection  NSURLRequest NSMutableURLReq ...

  10. 用 CALayer 定制下载进度条控件

    // // RPProgressView.h // CALayer定制下载进度条控件 // // Created by RinpeChen on 16/1/2. // Copyright © 2016 ...

随机推荐

  1. SparkSql 不支持Date Format (支持Timestamp)

    最近项目中需要用到sparksql ,需要查询sql Date类型, 无奈,官方现阶段 1.6.0 还不支持Date类型,不过支持Timestamp类型,所以问题可以解决了. 1.解析 SimpleD ...

  2. Spark之scala

    一.什么是scala scala 是基于JVMde 编程语言.JAVA是运行在jvm上的编程语言,java 源代码通过jvm被编译成class 文件,然后在os上运行class 文件.scala是运行 ...

  3. cacti错误

    cacti 错误:CMDPHP: Poller[0] ERROR 解决方案: 找到错误表 desc 表名: 修复此表 mysqlcheck -A -o -r -p -u用户名

  4. COGS 902 乐曲主题 题解 & hash入门贺

    [题意] 给定一个长为n的序列,元素都是不超过88的正整数,求序列中主题的最大长度. 所谓主题是指在序列中出现了至少两次并且不相交的子串.特别的,主题可以变调,也就是说如果一个子串全部加上或减去一个数 ...

  5. Google java style

    这里主要是记录关于java style的笔记. 1,Google的. 博客链接(中文):http://www.cnblogs.com/lanxuezaipiao/p/3534447.html. 官方链 ...

  6. 18.4---2出现了几次(CC150)

    思路:1,先给出LTE的代码: public static int countNumberOf2s(int n) { // write code here int res = 0; for(int i ...

  7. [转]mysql分布式方案-分库拆表

    来源:http://kissthink.com/archive/mysql-distributed-programs---and-warehouses-split-table.html 分库& ...

  8. phpcms二层栏目下拉和当前栏目高亮

    这里需要嵌套loop标签,既双层循环 第一层loop的catid = 0代表顶级栏目 第二层loop的catid = "$r[catid]"代表上层循环的栏目id <ul c ...

  9. Spring boot 打成jar包问题总结

    Spring boot 打成jar包问题总结 1.Unable to find a single main class from the following candidates 1.1.问题描述 m ...

  10. Closest Binary Search Tree Value I & II

    Closest Binary Search Tree Value Given a non-empty binary search tree and a target value, find the v ...