iOS学习笔记-111.多线程10——CGD队列组图片下载合成示例
来源:互联网 发布:亚像素边缘提取算法 编辑:程序博客网 时间:2024/06/07 10:54
- 多线程10CGD队列组图片下载合成示例
- 一图示
- 二分析
- 三代码
多线程10——CGD队列组图片下载合成示例
一、图示
二、分析
我们现在要干的事情是:下载两张图片,下载好了以后合成这两张图片。
事情的操作有先后顺序,我们可以使用栅栏函数和队列组。
这里面我们使用队列组。
分析过程:
我们开启两个子线程去下载两张图片(队列组异步函数)
下载完成后合并图片(可以放在 dispatch_group_notify 中执行)
合成完成以后,主线程更新UI(提交任务到主队列中)
三、代码
//// QWMViewController4.m// 03_UIview83多线程GCD//// Created by 杞文明 on 17/9/2.// Copyright © 2017年 杞文明. All rights reserved.// 图片合成#import "QWMViewController4.h"@interface QWMViewController4 ()@property(nonatomic,strong)UIImageView *imageView1;@property(nonatomic,strong)UIImageView *imageView2;@property(nonatomic,strong)UIImageView *imageView3;@property(nonatomic,strong)UIImage *image1;@property(nonatomic,strong)UIImage *image2;@end@implementation QWMViewController4- (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [self createImageView];}/*创建UIImageView控件*/-(void)createImageView{ //第一个资源图显示的ImageView UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 150, 150)]; //imageView.backgroundColor = [UIColor redColor]; self.imageView1 = imageView; [self.view addSubview:imageView]; //第二个资源图片显示的资ImageView imageView = [[UIImageView alloc]initWithFrame:CGRectMake(200, 20, 150, 150)]; //imageView.backgroundColor = [UIColor redColor]; self.imageView2 = imageView; [self.view addSubview:imageView]; //合并以后显示的ImageView imageView = [[UIImageView alloc]initWithFrame:CGRectMake(70, 200, 250, 500)]; //imageView.backgroundColor = [UIColor redColor]; self.imageView3 = imageView; [self.view addSubview:imageView];}-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self mergeImage];}/*合并图片*/-(void)mergeImage{ //1.获取队列 dispatch_queue_t queue = dispatch_get_global_queue(0, 0); //2.创建队列组 dispatch_group_t group = dispatch_group_create(); //3.下载图片 //3.1下载第一个图片 dispatch_group_async(group, queue, ^{ NSString * path = @"https://image.3761.com/pic/9551399945974.png"; self.image1 = [self downLoadImage:path]; }); //3.2下载第二个图片 dispatch_group_async(group, queue, ^{ NSString * path = @"http://p.3761.com/pic/43701399945993.png"; self.image2 = [self downLoadImage:path]; }); //4.合并图片,只有上面的两个完成了才能进行这个步骤 dispatch_group_notify(group, queue, ^{ //4.1 创建图形上下文 UIGraphicsBeginImageContext(CGSizeMake(250, 500)); //4.2 画图1 [self.image1 drawInRect:CGRectMake(0, 0, 250, 250)]; //4.2 画图2 [self.image2 drawInRect:CGRectMake(0, 250, 250, 250)]; //加个水印 UIImage *wImage = [UIImage imageNamed:@"qiwenminglog"]; [wImage drawInRect:CGRectMake(0, 0, 250, 60)]; [wImage drawInRect:CGRectMake(0, 220, 250, 60)]; [wImage drawInRect:CGRectMake(0, 440, 250, 60)]; //4.4 根据上下文得到一张图片 UIImage *image = UIGraphicsGetImageFromCurrentImageContext(); //4.5关闭上下文 UIGraphicsEndImageContext(); //4.6 更新UI 主线程中 dispatch_async(dispatch_get_main_queue(), ^{ self.imageView1.image = self.image1; self.imageView2.image = self.image2; self.imageView3.image = image; self.image1 = nil; self.image2 = nil; }); });}/*下载图片数据*/-(UIImage*)downLoadImage:(NSString*)path{ //1.获取URL NSURL *url = [NSURL URLWithString:path]; //2.下载二进制数据 NSData *imageData = [NSData dataWithContentsOfURL:url]; //3.转换图片格式 return [[UIImage alloc]initWithData:imageData];}@end
阅读全文
0 0
- iOS学习笔记-111.多线程10——CGD队列组图片下载合成示例
- iOS学习笔记-121.多线程20——NSOperation图片下载合成示例
- iOS学习笔记-110.多线程09——CGD队列组
- iOS学习笔记-105.多线程04——CGD基础
- iOS学习笔记-106.多线程05——CGD同步、异步函数和并行、串行、主队列示例
- iOS学习笔记-107.多线程06——CGD线程间通信下载图片
- iOS学习笔记-108.多线程07——CGD栅栏函数、延时、一次性代码
- iOS学习笔记-109.多线程08——CGD快速迭代
- iOS学习笔记-104.多线程03——线程间通信图片下载与时间计算
- iOS——图片下载
- iOS学习笔记-118.多线程17——NSOperationQueue队列的取消、暂停、恢复
- iOS(CGD)
- iOS学习笔记10(7)—GCD示例源码
- iOS学习笔记10(7)—GCD示例源码
- iOS学习笔记——多线程
- iOS学习笔记08—多线程概述
- iOS学习笔记03—多线程
- iOS学习笔记--gif图片合成
- 一、CentOS6.5安装ElasticSearch5.5完整纪录与问题总结
- ORACLE 11G 性能诊断优化之ASH实战分析详解
- iOS学习笔记-110.多线程09——CGD队列组
- promise.js
- Android强指针和弱指针
- iOS学习笔记-111.多线程10——CGD队列组图片下载合成示例
- Spring整合Redis(spring-data-redis)
- Flask01 初识flask、创建flask应用、flask启动配置
- each、foreach、list在遍历数组时的结合运用
- 16位汇编第六讲汇编指令详解第二讲
- redis集群搭建及注意事项
- Java
- ASP.NET Core 运行原理解剖[3]:Middleware-请求管道的构成
- Apache+jk实现tomcat负载均衡