iOS开发 -文件下载(3 进度条)

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

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开发网络篇

时间: 2024-12-22 06:06:39

iOS开发 -文件下载(3 进度条)的相关文章

iOS开发Quartz2D 三 进度条的应用

一:效果如图: 二:代码 #import "ViewController.h" #import "ProgressView.h" @interface ViewController () @property (weak, nonatomic) IBOutlet UILabel *valueTitle; @property (weak, nonatomic) IBOutlet ProgressView *progressView; @end @implementati

036_python的大文件下载以及进度条展示

复习 1.黏包现象 粘包现象的成因: tcp协议的特点,面向流的,为了保证可靠传输,所以有很多优化的机制. 无边界 所有在连接建立的基础上传递的数据之间没有界限. 收发消息很有可能不完全相等. 缓存机制,导致没发过去的消息会在发送端缓存,没接收完的消息会在接收端缓存. 解决: 给应用层定制协议 解决方案一:只发送一条信息 先发送一个定长表示待发送数据长度的bytes,先接收一个固定长度 再发送要发送的数据,再按照长度接收数据. 解决方案二 :发送的多条信息 先发送一个定长表示待发送字典长度的by

【iOS】环形渐变进度条实现

之前有人在找渐变进度条的效果,闲来无事就顺手写了一个,然后画了视图层级,方便讲解. 环境信息: Mac OS X 10.10.3 Xcode 6.3.1 iOS 8.3 效果图: 源码下载地址: https://github.com/saitjr/LoopProgressDemo.git 正文 一.视图层级 首先需要搞定的就是视图层级关系.可以看到, 1. 背景是有透明度的蓝色(blueView) 2. 需要一个从绿->黄->红的渐变色,那个这里我采用的是Layer(colorLayer) 3

android 文件下载及进度条显示

android 文件下载 进度条: ProgressDialog progress = new ProgressDialog(context); progress.setTitle(“文件下载”); progress.setMessage("loading..."); progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progress.setIndeterminate(false);//设置为fase等待进度更新,设

iOS Quartz2D模拟下载进度条

效果图: 步骤: 1.在StoryBoard中拖入一个控制器添加UISlider和UIView 2个控件 2.在控制器中连线监听UISlider的值变化事件.HJProgressView属性,把变化的值传递给自定义UIView 3.自定义HJProgressView重写progressValue属性set方法,重绘视图中得文字和弧度值 控制器代码: #import "ViewController.h" #import "HJProgressView.h" @inte

Java Swing程序开发—右下角显示进度条

虽然自己不喜欢Java的GUI程序,但是工作原因,听从上级安排. 转入正题:这篇文章实现在桌面右下角显示一个进度条,显示当前程序运行的进度.而且鼠标能够拖动进度条.有需要的童鞋,可以直接拷贝代码过去使用! Java参考代码: import java.awt.Dimension; import java.awt.Insets; import java.awt.Toolkit; import java.awt.event.MouseEvent; import java.awt.event.Mouse

ios线程练习更新进度条

类似于,我们加载网页时候的进度条,我们来看看它们是怎么工作的. #import "ViewController.h" @interface ViewController () { UIProgressView *_view; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //设置进度条 _view = [[UIProgressView alloc]init]; _view

IOS贝塞尔曲线圆形进度条和加载动画

做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步封装,不多说直接上代码: #import <UIKit/UIKit.h> @interface CircleLoader : UIView //进度颜色 @property(nonatomic, retain) UIColor* progressTintColor ; //轨道颜色 @proper

iOS 自定义控件 progressView(环形进度条)

转帖:http://blog.csdn.net/xiangzhang321/article/details/42688133 之前做项目的时候有用到环形进度条,先是在网上找了一下第三方控件,发现好用是好用,就是东西太多了,有点复杂,还不如自己写一个简单点适合自己用的. 先把自定义控件的效果图贴出来.     其实我写的这个控件很简单.索性就直接把源码贴出来吧. .h文件的内容就是一些声明 #import <UIKit/UIKit.h> @interface ProgressView : UIV

iOS 开发-文件下载原理

文件上传 创建文件上传类FileDownload.h // // FileDownload.h // 01.文件下载 // // Created by wyh on 15-1-29. // Copyright (c) 2015年 itcast. All rights reserved. // #import <Foundation/Foundation.h> @interface FileDownload : NSObject - (void)downloadFileWithURL:(NSUR