- 支持断点下载
- 异常退出,再次打开保留下载进度
- 实时下载进度
- 实时下载速度
- iOS 7+
- Xcode 6+
ZFDownload的具体实现,可以看ZFPlayer,已获取1000多颗star:ZFPlayer
pod 'ZFDownload'
[[ZFDownloadManager sharedInstance] download:urlString progress:^(CGFloat progress, NSString *speed, NSString *remainingTime, NSString *writtenSize, NSString *totalSize) {
dispatch_async(dispatch_get_main_queue(), ^{
// insert code here
});
} state:^(DownloadState state) {}];
在cell上获取实时下载进度,遵守 ZFDownloadDelegate代理,然后实现
#pragma mark - ZFDownloadDelegate
- (void)downloadResponse:(ZFSessionModel *)sessionModel
{
if (self.downloadObjectArr) {
// 取到对应的cell上的model
NSArray *downloadings = self.downloadObjectArr[1];
if ([downloadings containsObject:sessionModel]) {
NSInteger index = [downloadings indexOfObject:sessionModel];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:index inSection:1];
__block ZFDownloadingCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
__weak typeof(self) weakSelf = self;
sessionModel.progressBlock = ^(CGFloat progress, NSString *speed, NSString *remainingTime, NSString *writtenSize, NSString *totalSize) {
dispatch_async(dispatch_get_main_queue(), ^{
cell.progressLabel.text = [NSString stringWithFormat:@"%@/%@ (%.2f%%)",writtenSize,totalSize,progress*100];
cell.speedLabel.text = speed;
cell.progress.progress = progress;
cell.downloadBtn.selected = YES;
});
};
sessionModel.stateBlock = ^(DownloadState state){
dispatch_async(dispatch_get_main_queue(), ^{
// 更新数据源
if (state == DownloadStateCompleted) {
[weakSelf initData];
cell.downloadBtn.selected = NO;
}
// 暂停
if (state == DownloadStateSuspended) {
cell.speedLabel.text = @"已暂停";
cell.downloadBtn.selected = NO;
}
});
};
}
}
}
- 微博: @任子丰
- 邮箱: [email protected]
- QQ群:213376937
ZFDownload is available under the MIT license. See the LICENSE file for more info.