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

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.显示

模拟器显示:

打印查看:

iOS进度条显示的更多相关文章

  1. 【Winform】使用BackgroundWorker控制进度条显示进度

    许多开发者看见一些软件有进度条显示进度,自己想弄,项目建好后发现并没有自己想象中的那么简单...看了网上很多教程后,写了一个小Demo供网友们参考~~,Demo的网址:http://pan.baidu ...

  2. Extjs 使用fileupload插件上传文件 带进度条显示

    一.首先我们看看官方给出的插件的解释: 一个文件上传表单项具有自定义的样式,并且可以控制按钮的文本和 像文本表单的空文本类似的其他特性. 它使用一个隐藏的文件输入元素,并在用户选择文件后 在form提 ...

  3. Ajax上传文件进度条显示

    要实现进度条的显示,就要知道两个参数,上传的大小和总文件的大小 html5提供了一个上传过程事件,在上传过程中不断触发,然后用已上传的大 小/总大小,计算上传的百分比,然后用这个百分比控制div框的显 ...

  4. 【Android】读取sdcard卡上的全部图片而且显示,读取的过程有进度条显示

    尽管以下的app还没有做到快图浏览.ES文件浏览器的水平,遇到大sdcard还是会存在读取过久.内存溢出等问题,可是基本思想是这种. 例如以下图.在sdcard卡上有4张图片, 打开app,则会吧sd ...

  5. Qt flash_eraseall nandwrite 进度条显示擦除、烧录

    /***************************************************************************** * Qt flash_eraseall n ...

  6. MFC读写.txt文件时进度条显示实时进度

    整体实现方式:先获得文件长度,然后用每次读取的长度,计算出完成的百分比,用百分比的值设置进度条. 一.MFC进度条 Progress Control 相关函数 1. create() --创建Prog ...

  7. iOS 获取内存大小使用情况(进度条显示)

    一.获取设备内存大小方法 //返回存储内存占用比例 - (NSString *)getFreeDiskspaceRate{ float totalSpace; .f; NSError *error = ...

  8. ajaxSubmit() 上传文件和进度条显示

    1.  首先引用js文件 <script type="text/javascript" src="/js/jquery/jquery.form.js"&g ...

  9. Python 计算π及进度条显示

    一,首先打开命令提示符找到Python路径,输入pip install tqdm下载第三方库tpdm. 二,写程序 法一 from math import * from tqdm import tqd ...

随机推荐

  1. SS命令和Netstat命令比较

    在早期运维工作中,查看服务器连接数一般都会用netstat命令.其实,有一个命令比netstat更高效,那就是ss(Socket Statistics)命令!ss命令可以用来获取socket统计信息, ...

  2. memcached的图形界面监控

    前提是已经安装了php和memcached   图形界面的监控是通过memcache.php来实现的,   1.把该php程序拷贝到apache的web根目录   [root@cacti srv]# ...

  3. PAT 1008. 数组元素循环右移问题 (20)

    一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1--AN-1)变换为(AN-M -- AN-1 A0 ...

  4. Java操作符

    几乎所有运算符都只能操作"主类型"(Primitives).例外是"="."= ="和"! =",它们能操作所有对象.除 ...

  5. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  6. vijos P1448 校门外的树

    描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的--如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作:\(K=1\),读入\(l, ...

  7. SQLServer 分布式查询MySQL

    这学期开了分布式数据库这门课,开始编程实现,今天调试了一早上,写下此配置文件方便查询. 本文实现的是SQLServer2008 Express 链式添加MySql-5.6.10数据库,进行远程操作. ...

  8. 在线音乐网站【03】Part one 功能实现

    今天打算把网站功能的具体实现给总结一下,如果你想了解整个小项目,建议你先看看前面2篇博客. 1.在线音乐网站(1)需求和功能结构 2.在线音乐网站(2)数据库和开发环境 7.网站主要模块实现 a.在线 ...

  9. 设置svg图片大小

    background-image: url(/resources/img/liveSupport/tx_1.svg); background-size: 16px 16px; width: 16px; ...

  10. <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!

    先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...