1 #import "HMViewController.h" 2 3 @interface HMViewController () 4 @property (weak, nonatomic) IBOutlet UIImageView *imageView1; 5 @property (weak, nonatomic) IBOutlet UIImageView *imageView2; 6 @property (weak, nonatomic) IBOutlet UIImageView *bigImageView; 7 @end 8 9 @implementation HMViewController 10 11 - (void)viewDidLoad 12 { 13 [super viewDidLoad]; 14 // Do any additional setup after loading the view, typically from a nib. 15 16 // 图片1: http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg 17 // 图片2: http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg 18 /** 19 1.下载图片1和图片2 20 21 2.将图片1和图片2合并成一张图片后显示到imageView上 22 23 思考: 24 * 下载图片 : 子线程 25 * 等2张图片都下载完毕后, 才回到主线程 26 */ 27 } 28 29 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 30 { 31 // 创建一个组 32 dispatch_group_t group = dispatch_group_create(); 33 34 // 开启一个任务下载图片1 35 __block UIImage *image1 = nil; 36 dispatch_group_async(group, global_queue, ^{ 37 image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"]; 38 }); 39 40 // 开启一个任务下载图片2 41 __block UIImage *image2 = nil; 42 dispatch_group_async(group, global_queue, ^{ 43 image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/b2a9cfc88b7a56cfa59b8d09208fa1fb.jpg"]; 44 }); 45 46 // 同时执行下载图片1\下载图片2操作 47 48 // 等group中的所有任务都执行完毕, 再回到主线程执行其他操作 49 dispatch_group_notify(group, main_queue, ^{ 50 self.imageView1.image = image1; 51 self.imageView2.image = image2; 52 53 // 合并 54 UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0); 55 [image1 drawInRect:CGRectMake(0, 0, 100, 100)]; 56 [image2 drawInRect:CGRectMake(100, 0, 100, 100)]; 57 self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 58 // 关闭上下文 59 UIGraphicsEndImageContext(); 60 }); 61 // if (self.log == NO) { 62 // NSLog(@"-------touchesBegan"); 63 // self.log = YES; 64 // } 65 // static dispatch_once_t onceToken; 66 // dispatch_once(&onceToken, ^{ 67 // NSLog(@"-------touchesBegan"); 68 // }); 69 } 70 71 - (void)downlaod2image 72 { 73 dispatch_async(global_queue, ^{ 74 NSLog(@"下载图片---%@", [NSThread currentThread]); 75 76 // 下载图片1 77 UIImage *image1 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"]; 78 NSLog(@"下载完图片1---%@", [NSThread currentThread]); 79 // 下载图片2 80 UIImage *image2 = [self imageWithURL:@"http://news.baidu.com/z/resource/r/image/2014-06-22/2a1009253cf9fc7c97893a4f0fe3a7b1.jpg"]; 81 NSLog(@"下载完图片2---%@", [NSThread currentThread]); 82 83 dispatch_async(main_queue, ^{ 84 NSLog(@"显示图片---%@", [NSThread currentThread]); 85 86 self.imageView1.image = image1; 87 self.imageView2.image = image2; 88 89 // 合并 90 UIGraphicsBeginImageContextWithOptions(CGSizeMake(200, 100), NO, 0.0); 91 [image1 drawInRect:CGRectMake(0, 0, 100, 100)]; 92 [image2 drawInRect:CGRectMake(100, 0, 100, 100)]; 93 self.bigImageView.image = UIGraphicsGetImageFromCurrentImageContext(); 94 // 关闭上下文 95 UIGraphicsEndImageContext(); 96 }); 97 }); 98 } 99 100 - (UIImage *)imageWithURL:(NSString *)urlStr 101 { 102 NSURL *url = [NSURL URLWithString:urlStr]; 103 NSData *data = [NSData dataWithContentsOfURL:url]; // 这行会比较耗时 104 return [UIImage imageWithData:data]; 105 } 106 107 - (void)delay 108 { 109 // NSLog(@"----touchesBegan----%@", [NSThread currentThread]); 110 111 // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 112 // [self performSelector:@selector(run) withObject:nil afterDelay:2.0]; 113 // }); 114 // 1.全局并发队列 115 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 116 117 // 2.计算任务执行的时间 118 dispatch_time_t when = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)); 119 120 // 3.会在when这个时间点, 执行queue中的任务 121 dispatch_after(when, queue, ^{ 122 NSLog(@"----run----%@", [NSThread currentThread]); 123 }); 124 } 125 126 @end
时间: 2024-10-09 14:27:18