您的位置:首页 > 产品设计 > UI/UE

创建队列 NSOperationQueue dispatch队列组

2015-12-28 17:18 337 查看
// dispatch 队列组

@property (weak, nonatomic) IBOutlet UIImageView *imageView;

@property (nonatomic, strong) UIImage *image1;

@property (nonatomic, strong) UIImage *image2;

@end

@implementation HMViewController

- (void)viewDidLoad

{

[super viewDidLoad];

// [self test1];

}

// 2D绘图 Quartz2D

// 合并图片 -- 水印

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

{

// 1.队列组

dispatch_group_t group = dispatch_group_create();

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

// 2.下载图片1

__block UIImage *image1 = nil;

dispatch_group_async(group, queue, ^{

NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"];

NSData *data1 = [NSData dataWithContentsOfURL:url1];

image1 = [UIImage imageWithData:data1];

});

// 3.下载图片2

__block UIImage *image2 = nil;

dispatch_group_async(group, queue, ^{

NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"];

NSData *data2 = [NSData dataWithContentsOfURL:url2];

image2 = [UIImage imageWithData:data2];

});

// 4.合并图片 (保证执行完组里面的所有任务之后,再执行notify函数里面的block)

dispatch_group_notify(group, queue, ^{

// 开启一个位图上下文

UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0);

// 绘制第1张图片

CGFloat image1W = image1.size.width;

CGFloat image1H = image1.size.height;

[image1 drawInRect:CGRectMake(0, 0, image1W, image1H)];

// 绘制第2张图片

CGFloat image2W = image2.size.width * 0.5;

CGFloat image2H = image2.size.height * 0.5;

CGFloat image2Y = image1H - image2H;

[image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)];

// 得到上下文中的图片

UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();

// 结束上下文

UIGraphicsEndImageContext();

// 5.回到主线程显示图片

dispatch_async(dispatch_get_main_queue(), ^{

self.imageView.image = fullImage;

[self test2];

});

});

}

- (void)test2

{

// 异步下载

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 1.下载第1张

NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"];

self.image1 = [UIImage imageWithData:[NSData dataWithContentsOfURL:url1]];

[self bindImages];

});

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 2.下载第2张

NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"];

NSData *data2 = [NSData dataWithContentsOfURL:url2];

self.image2 = [UIImage imageWithData:data2];

[self bindImages];

});

}

- (void)bindImages

{

if (self.image1 == nil || self.image2 == nil) return;

// 3.合并图片

// 开启一个位图上下文

UIGraphicsBeginImageContextWithOptions(self.image1.size, NO, 0.0);

// 绘制第1张图片

CGFloat image1W = self.image1.size.width;

CGFloat image1H = self.image1.size.height;

[self.image1 drawInRect:CGRectMake(0, 0, image1W, image1H)];

// 绘制第2张图片

CGFloat image2W = self.image2.size.width * 0.5;

CGFloat image2H = self.image2.size.height * 0.5;

CGFloat image2Y = image1H - image2H;

[self.image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)];

// 得到上下文中的图片

UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();

// 结束上下文

UIGraphicsEndImageContext();

// 4.回到主线程显示图片

dispatch_async(dispatch_get_main_queue(), ^{

self.imageView.image = fullImage;

});

}

- (void)test1

{

// 异步下载

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

// 1.下载第1张

NSURL *url1 = [NSURL URLWithString:@"http://g.hiphotos.baidu.com/image/pic/item/f2deb48f8c5494ee460de6182ff5e0fe99257e80.jpg"];

NSData *data1 = [NSData dataWithContentsOfURL:url1];

UIImage *image1 = [UIImage imageWithData:data1];

// 2.下载第2张

NSURL *url2 = [NSURL URLWithString:@"http://su.bdimg.com/static/superplus/img/logo_white_ee663702.png"];

NSData *data2 = [NSData dataWithContentsOfURL:url2];

UIImage *image2 = [UIImage imageWithData:data2];

// 3.合并图片

// 开启一个位图上下文

UIGraphicsBeginImageContextWithOptions(image1.size, NO, 0.0);

// 绘制第1张图片

CGFloat image1W = image1.size.width;

CGFloat image1H = image1.size.height;

[image1 drawInRect:CGRectMake(0, 0, image1W, image1H)];

// 绘制第2张图片

CGFloat image2W = image2.size.width * 0.5;

CGFloat image2H = image2.size.height * 0.5;

CGFloat image2Y = image1H - image2H;

[image2 drawInRect:CGRectMake(0, image2Y, image2W, image2H)];

// 得到上下文中的图片

UIImage *fullImage = UIGraphicsGetImageFromCurrentImageContext();

// 结束上下文

UIGraphicsEndImageContext();

// 4.回到主线程显示图片

dispatch_async(dispatch_get_main_queue(), ^{

self.imageView.image = fullImage;

});

});

}

/ / NSOperationQueue 队列

// 创建队列

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

// 创建操作

NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];

// operation直接调用start,是同步执行(在当前线程执行操作)

// [operation start];

// 添加操作到队列中,会自动异步执行

[queue addOperation:operation];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: