队列组-合并图片-07-08-09-GCD

 1 //
 2 //  ViewController.m
 3 //  07-合并图片
 4 //
 5 //  Created by mac on 16/4/21.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8 //    NSURL *url = [NSURL URLWithString:@"http://h.hiphotos.baidu.com/image/pic/item/574e9258d109b3dedb168a8ec8bf6c81810a4cae.jpg"];
 9 //    NSURL *url = [NSURL URLWithString:@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"];
10 
11 #import "UIImageView+WebCache.h"
12 #import "ViewController.h"
13 
14 @interface ViewController ()
15 
16 @end
17 
18 @implementation ViewController {
19     
20     UIImageView *imageView;
21 }
22 
23 - (void)viewDidLoad {
24     [super viewDidLoad];
25 
26     imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
27     imageView.backgroundColor = [UIColor cyanColor];
28     
29     [self.view addSubview:imageView];
30 }
31 
32 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
33 
34     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
35         
36         //1. 下载第一张图片
37         NSURL *url = [NSURL URLWithString:@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"];
38         
39         NSData *data = [NSData dataWithContentsOfURL:url];
40         UIImage *image = [UIImage imageWithData:data];
41         
42         //2. 下载第二种图片
43         NSURL *url2 = [NSURL URLWithString:@"http://www.jushuo.com/uploads/allimg/151204/5-1512040Z34a50.jpg"];
44         
45         NSData *data2 = [NSData dataWithContentsOfURL:url2];
46         UIImage *image2 = [UIImage imageWithData:data2];
47         
48         
49         //3. 合并 :
50         //1)开启一个位图上下文
51         UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
52         
53         //2) 绘制第一张和第二张图
54         [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
55         [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height * 0.5)];
56         
57         //3) 得到上下文中的图片
58         UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();
59         
60         //4) 结束上下文
61         UIGraphicsEndImageContext();
62         
63         
64         //4. 主线程中加载UI
65         dispatch_async(dispatch_get_main_queue(), ^{
66            
67             imageView.image = fullImage;
68         });
69 
70     });
71 }
72 
73 @end

 

 1 //
 2 //  ViewController.m
 3 //  08-队列组-GCD
 4 //
 5 //  Created by mac on 16/4/21.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8 
 9 #import "ViewController.h"
10 
11 @interface ViewController ()
12 
13 @end
14 
15 @implementation ViewController {
16 
17     UIImageView *imageView;
18     UIImage *image;
19     UIImage *image2;
20 }
21 
22 - (void)viewDidLoad {
23     [super viewDidLoad];
24     
25     imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
26     imageView.backgroundColor = [UIColor cyanColor];
27     
28     [self.view addSubview:imageView];
29 }
30 
31 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
32     
33     if (image || image2) return;
34     
35     NSLog(@"hahaha");
36     
37     [self downloadImage];
38 }
39 
40 - (void)downloadImage {
41     
42         //1. 下载第一张图片
43     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
44         
45         NSURL *url = [NSURL URLWithString:@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"];
46         NSData *data = [NSData dataWithContentsOfURL:url];
47         image = [UIImage imageWithData:data];
48         
49         [self text];
50     });
51     
52        //2. 下载第二张图片
53     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
54         
55         NSURL *url2 = [NSURL URLWithString:@"http://www.jushuo.com/uploads/allimg/151204/5-1512040Z34a50.jpg"];
56         NSData *data2 = [NSData dataWithContentsOfURL:url2];
57         image2 = [UIImage imageWithData:data2];
58         
59         [self text];
60     });
61 }
62 
63 - (void)text {
64     
65     if (image == nil || image2 == nil) return;
66         
67     //3. 合并 :
68 
69     //1)开启一个位图上下文
70         UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
71         
72         //2) 绘制第一张和第二张图
73         [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
74         [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height * 0.5)];
75         
76         //3) 得到上下文中的图片
77         UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();
78         
79         //4) 结束上下文
80         UIGraphicsEndImageContext();
81         
82         //4. 主线程中加载UI
83         dispatch_async(dispatch_get_main_queue(), ^{
84             
85             imageView.image = fullImage;
86         });
87 }
88 
89 @end

 

 1 //
 2 //  NewViewController.m
 3 //  08-队列组-GCD
 4 //
 5 //  Created by mac on 16/4/21.
 6 //  Copyright © 2016年 mac. All rights reserved.
 7 //
 8 
 9 #import "NewViewController.h"
10 
11 @interface NewViewController ()
12 
13 @end
14 
15 @implementation NewViewController {
16     
17         UIImageView *imageView;
18 }
19 
20 - (void)viewDidLoad {
21     [super viewDidLoad];
22     
23     imageView = [[UIImageView alloc] initWithFrame:self.view.frame];
24     imageView.backgroundColor = [UIColor cyanColor];
25     
26     [self.view addSubview:imageView];
27 }
28 
29 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
30     
31     [self downloadImage];
32     NSLog(@"downloadImage");
33 }
34 
35 /**
36  *  队列组(dispatch_group_t )(dispatch_group_notify)
37  */
38 - (void)downloadImage {
39     
40     //1. 队列组
41     dispatch_group_t group = dispatch_group_create();
42     
43     //2. 队列
44     dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
45     
46     //3. 下载第一张图片
47     __block UIImage *image = nil;
48     dispatch_group_async(group, queue, ^{
49         
50         NSURL *url = [NSURL URLWithString:@"https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png"];
51         NSData *data = [NSData dataWithContentsOfURL:url];
52         image = [UIImage imageWithData:data];
53     });
54     
55     //4. 下载第二张图片
56     __block UIImage *image2 = nil;
57     dispatch_group_async(group, queue, ^{
58         
59         NSURL *url2 = [NSURL URLWithString:@"http://www.jushuo.com/uploads/allimg/151204/5-1512040Z34a50.jpg"];
60         NSData *data2 = [NSData dataWithContentsOfURL:url2];
61         image2 = [UIImage imageWithData:data2];
62     });
63     
64     //5. 合并图片(保证执行完组里面的所有任务之后,在执行notify里面的block )
65     dispatch_group_notify(group, queue, ^{
66         
67         //1)开启一个位图上下文
68         UIGraphicsBeginImageContextWithOptions(image.size, NO, 0.0);
69         
70         //2) 绘制第一张和第二张图
71         [image2 drawInRect:CGRectMake(0, 0, image2.size.width, image2.size.height)];
72         [image drawInRect:CGRectMake(0, 0, image.size.width, image.size.height * 0.5)];
73         
74         //3) 得到上下文中的图片
75         UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();
76         
77         //4) 结束上下文
78         UIGraphicsEndImageContext();
79         
80         //5. 回到主线程中加载UI
81         dispatch_async(dispatch_get_main_queue(), ^{
82             
83             imageView.image = fullImage;
84         });
85     });
86 
87 }
88 
89 @end

 

posted on 2016-04-21 15:54  爱你久久iOS  阅读(175)  评论(0编辑  收藏  举报

导航