OC - GCD 队列组 - 下载图片画图
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self downloadImage];
}
-(void)downloadImage{
dispatch_group_t group = dispatch_group_create();
dispatch_queue_t queue = dispatch_get_global_queue(, );
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530167525247&di=f09b0f4412a2825e4ae641079691cd14&imgtype=0&src=http%3A%2F%2Fpic35.photophoto.cn%2F20150617%2F0013026499624253_b.png"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image1 = [UIImage imageWithData:data];
});
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL URLWithString:@"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1530167525247&di=184be5b28b34bf0670e9cb065fef673c&imgtype=0&src=http%3A%2F%2Fpic22.nipic.com%2F20120724%2F16351_204302573152_2.png"];
NSData *data = [NSData dataWithContentsOfURL:url];
self.image2 = [UIImage imageWithData:data];
});
dispatch_group_notify(group,queue , ^{
//1创建图形上下文
UIGraphicsBeginImageContext(CGSizeMake(, ));
//2.画图
[self.image1 drawInRect:CGRectMake(, , , )];
self.image1 = nil;//此时不需要图片了
//3.画图
[self.image2 drawInRect:CGRectMake(, , , )];
self.image2 = nil;//此时不需要图片了
//4.从图形上下文获取图片
UIImage *tempImage = UIGraphicsGetImageFromCurrentImageContext();
//5.关闭上下文
UIGraphicsEndImageContext();
//6更新UI
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = tempImage;
});
});
}

swift 版 下载图片
//保证 下载完图片在分享
private func getDownloadImage(urlStrArr:[String], block:@escaping (_ imageArr:[UIImage])->()){
var downloadImageArr : [UIImage] = []
var tempBlock : ((_ imageArr:[UIImage])->())? = nil
tempBlock = block
let group = DispatchGroup()
let diyQueue = DispatchQueue(label: "diyQueue") for (_, urlStr) in urlStrArr.enumerated(){
group.enter()
diyQueue.async {
if let tempUrl = URL.init(string: urlStr){
if let tempData = try? Data.init(contentsOf: tempUrl){
if let tempImage = UIImage.init(data: tempData){
downloadImageArr.append(tempImage)
group.leave()
}
}
}
}
} //走完队列
group.notify(queue: diyQueue) { //这个地方可以合并数据, 图片合并操作等等
//主线程刷新
DispatchQueue.main.async {
tempBlock?(downloadImageArr)
}
}
}
调用
getDownloadImage(urlStrArr: [dataStruct.relationQrCodeUrl]) { [weak self](imageArr:[UIImage]) in
self?.downloadView.updateImage(downImage: imageArr[])
}
OC - GCD 队列组 - 下载图片画图的更多相关文章
- iOS边练边学--GCD的基本使用、GCD各种队列、GCD线程间通信、GCD常用函数、GCD迭代以及GCD队列组
一.GCD的基本使用 <1>GCD简介 什么是GCD 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 GCD的优势 G ...
- OC 线程操作 - GCD队列组
1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ ...
- 多线程 GCD队列组
// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___ ...
- 多线程基础(七)GCD线程组+栅栏函数
1.GCD队列组 拦截通知和等待所有任务全部结束在继续往下执行|阻塞 需求:下载两张图片,等两张图片都下载完毕之后,合成图片(这个实例,复习的时候一定要凭空敲出代码练习,好记性不如烂键 ...
- AJ学IOS(51)多线程网络之GCD下载合并图片_队列组的使用
AJ分享,必须精品 合并图片(图片水印)第一种方法 效果 实现: 思路: 1.分别下载2张图片:大图片.LOGO 2.合并2张图片 3.显示到一个imageView身上 // 异步下载 dispatc ...
- iOS开发——多线程篇——NSOperation(基于GCD多线程编程),下载图片并合成新图片
一.NSOperation的基本概念1.简介NSOperation的作用配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperatio ...
- [Xcode 实际操作]八、网络与多线程-(22)使用GCD多线程技术异步下载图片
目录:[Swift]Xcode实际操作 本文将演示如何使用使用GCD多线程技术异步下载图片. Grand Central Dispatch(GCD) 是 Apple 开发的一个多核编程的较新的解决方法 ...
- IOS GCD (事例下载图片)
@interface HMViewController () @property (weak, nonatomic) IBOutlet UIImageView *imageView; @end @im ...
- [翻译] AsyncImageView 异步下载图片
AsyncImageView https://github.com/nicklockwood/AsyncImageView AsyncImageView is a simple extension ...
随机推荐
- ubuntu 常用命令集锦
一.文件/文件夹管理 ls 列出当前目录文件(不包括隐含文件) ls -a 列出当前目录文件(包括隐含文件) ls -l 列出当前目录下文件的详细信息 cd .. 回当前目录的上一级目录 cd - 回 ...
- Leetcode 之Simplify Path @ python
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", ...
- 032:基于Consul和MGR的MySQL高可用架构
目录 一.Consul 1.Consul简介 2.准备环境 3.Consul 安装 4.Consul配置文件 5.Consul 服务检查脚本 6.Consul启动 二.MGR搭建 1.MGR配置 2. ...
- 对于分类问题的神经网络最后一层的函数:sigmoid、softmax与损失函数
对于分类问题的神经网络最后一层的函数做如下知识点总结: sigmoid和softmax一般用作神经网络的最后一层做分类函数(备注:sigmoid也用作中间层做激活函数): 对于类别数量大于2的分类问题 ...
- css基础示例代码
选择器 引入方式 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- MONGODB用户、角色和权限管理
最近遇到很多问MONGODB用户认证授权方面的问题,现在特记录下来,与大家共享. 一.概念理解 1.用户概念 Mongodb的用户是由 用户名+所属库名组成 例如: 登录mongo testdb ...
- 配置Ubuntu虚拟环境
1.ubuntu默认root用户没有激活,激活root用户,就要为root用户创建密码 $sudo passwd root 2.修改主机名 $vi /etc/hostname 3.安装ssh服 ...
- hbase命名空间
在HBase中,namespace命名空间指对一组表的逻辑分组,类似于数据库,便于对表在业务上划分 HBase系统默认定义了两个缺省的namespace hbase:系统内建表,包括namespace ...
- Java的Guava
主要是看代码看到了Table这个类,竟然有两个键! http://www.cnblogs.com/peida/p/3183505.html
- vi和vim的三种模式
1.一般模式 用vi 或vim 命令 ——>一般模式 2. 插入模式 i,o,a,r 及其各自大写 ——>插入模式 一般用 i 3.命令行模式 用命令来完成 读取,存盘,替换,离开vim ...