GCD队列组
2016-06-01 14:03
399 查看
@interface
ViewController ()
@property (nonatomic,strong)UIImage
*image1;
@property (nonatomic,strong)UIImage
*image2;
@end
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
dispatch_queue_t queue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0);
/*
//1.下载图片1
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"图片"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
});
//2.下载图片2
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"图片"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
});
// 方法一:拦截方法,保证前两个任务完成,再做3.图片合成
//并发队列不知道前面谁先请求下来,所以加dispatch_barrier_async
//dispatch_barrier_async(, <#^(void)block#>)
//3.将图片1,图片2合成一张新的图片
//4.将新图片显示出来
*/
// 方法二:
// 创建一个队列组
dispatch_group_t group =
dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL
URLWithString:@"图片"];
NSData *data = [NSData
dataWithContentsOfURL:url];
_image1 = [UIImage
imageWithData:data];
});
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL
URLWithString:@"图片"];
NSData *data = [NSData
dataWithContentsOfURL:url];
_image2 = [UIImage
imageWithData:data];
});
//3.将图片1,图片2合成一张新的图片
// 任务一和任务二都执行完,才执行dispatch_group_notify
dispatch_group_notify(group, queue, ^{
// 开启新的图像上下文
UIGraphicsBeginImageContext(CGSizeMake(100,
100));
//绘制图片
[self.image1
drawInRect:CGRectMake(0,
0, 50,
100)];
[self.image2
drawInRect:CGRectMake(50,
0, 50,
100)];
//取得上下文图片
UIImage *image =
UIGraphicsGetImageFromCurrentImageContext();
//结束上下文
UIGraphicsEndImageContext();
//回到主线程显示图片
dispatch_async(dispatch_get_main_queue(), ^{
//4将图片显示过来,到storyboard
self.imageView.image = image;
});
});
}
ViewController ()
@property (nonatomic,strong)UIImage
*image1;
@property (nonatomic,strong)UIImage
*image2;
@end
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent
*)event{
dispatch_queue_t queue =
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,
0);
/*
//1.下载图片1
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"图片"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
});
//2.下载图片2
dispatch_async(queue, ^{
NSURL *url = [NSURL URLWithString:@"图片"];
NSData *data = [NSData dataWithContentsOfURL:url];
UIImage *image = [UIImage imageWithData:data];
});
// 方法一:拦截方法,保证前两个任务完成,再做3.图片合成
//并发队列不知道前面谁先请求下来,所以加dispatch_barrier_async
//dispatch_barrier_async(, <#^(void)block#>)
//3.将图片1,图片2合成一张新的图片
//4.将新图片显示出来
*/
// 方法二:
// 创建一个队列组
dispatch_group_t group =
dispatch_group_create();
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL
URLWithString:@"图片"];
NSData *data = [NSData
dataWithContentsOfURL:url];
_image1 = [UIImage
imageWithData:data];
});
dispatch_group_async(group, queue, ^{
NSURL *url = [NSURL
URLWithString:@"图片"];
NSData *data = [NSData
dataWithContentsOfURL:url];
_image2 = [UIImage
imageWithData:data];
});
//3.将图片1,图片2合成一张新的图片
// 任务一和任务二都执行完,才执行dispatch_group_notify
dispatch_group_notify(group, queue, ^{
// 开启新的图像上下文
UIGraphicsBeginImageContext(CGSizeMake(100,
100));
//绘制图片
[self.image1
drawInRect:CGRectMake(0,
0, 50,
100)];
[self.image2
drawInRect:CGRectMake(50,
0, 50,
100)];
//取得上下文图片
UIImage *image =
UIGraphicsGetImageFromCurrentImageContext();
//结束上下文
UIGraphicsEndImageContext();
//回到主线程显示图片
dispatch_async(dispatch_get_main_queue(), ^{
//4将图片显示过来,到storyboard
self.imageView.image = image;
});
});
}
相关文章推荐
- iOS开发之路--微博“更多”页面
- iOS开发之路--微博骨架搭建
- iOS开发使用JSON解析网络数据
- IOS开发代码分享之获取启动画面图片的string
- iOS开发实现音频播放功能
- iOS开发之视图切换
- iOS开发使用XML解析网络数据
- IOS开发实现录音功能
- iOS开发之UIScrollView详解
- IOS开发之路--C语言数组和字符串
- iOS开发之触摸事件
- 详解iOS多线程GCD的使用
- 详解IOS中GCD的使用
- 详解iOS中多线程app开发的GCD队列的使用
- IOS开发代码分享之用nstimer实现倒计时功能
- iOS开发使用GDataXML框架解析网络数据
- iOS开发之UITableView详解
- IOS开发代码分享之设置UISearchBar的背景颜色
- ios推送证书
- iOS和tvOS游戏按需加载资源简介