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

1.代码示例

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

    1.代码管理工具git的学习  http://www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 2.github的使用帮助   https:// ...

  2. iOS ARC内存管理

    iOS的内存管理机制,只要是iOS开发者,不管多长的时间经验,都能说出来一点,但是要深入的理解.还是不简单的.随着ARC(自动管理内存)的流行.iOS开发者告别了手动管理内存的复杂工作.但是自动管理内 ...

  3. Pycharm: keyboard reference

    Source: Official set ♥ Editing Ctrl + Space Basic code completion (the name of any class, method or ...

  4. Javascript中document.execCommand()的用法

    document.execCommand()方法处理Html数据时常用语法格式如下:document.execCommand(sCommand[,交互方式, 动态参数]) 其中:sCommand为指令 ...

  5. “Word自动更改后的内容保存到通用文档模板上。是否加载该模板?“的解决办法

    在win7系统下,Word2010出现了不能正常关闭.打开一个已有word文档,点击右上角关闭按钮后,先提示"word已停止工作,windows正在检查该问题的解决方案",随后提示 ...

  6. C# where用法

    where 子句用于指定类型约束,这些约束可以作为泛型声明中定义的类型参数的变量. 1.接口约束. 例如,可以声明一个泛型类 MyGenericClass,这样,类型参数 T 就可以实现 ICompa ...

  7. 需要安全认证的远程EJB调用示例(Jboss EAP 6.2环境)

    一,Remote EJB 服务接口定义: package yjmyzz.ejb.server.helloworld; public interface HelloWorldService { publ ...

  8. Android -- TouchDelegate

    设计规定 Android4.0设计规定的有效可触摸的UI元素标准是48dp,这是一个用户手指能准确并且舒适触摸的区域. 如下图所示,你的UI元素可能小于48dp,图标仅有32dp,按钮仅有40dp,但 ...

  9. Qt5 新特性

    Qt 5 已经临近发布,其最大的特点就是模块化.将原来庞大的模块更细分为不同的部分,同时,一个大版本的升级,当然少不了添加.删除各个功能类.文本简单介绍 Qt5 的特性,其具体内容来自 Qt5 官方 ...

  10. JQuery fullCalendar 时间差 排序获取距当前最近的时间。

    let time = (wo: WoDto) => wo.ScheduleTime || wo.ScheduleStartTime; let wo = technician.wos .filte ...