我正在使用中央调度将一个任务排入队列,以捕获UIView作为映像。除了在队列上运行图像捕获需要相当长的时间之外,一切都运行得很好。
有没有什么方法可以加快速度或者提高我的技术。下面是捕获和缩放图像的代码,然后将其设置为UIImageView的图像以供显示。
(void)captureScrollViewImageForLayoverView
{
// capture big map image
CGSize size = mainView.bounds.size;
UIGraphicsBeginImageContext(size);
[[mainView layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
// scale map
size = myLocationOverlay.bounds.size;
UIGraphicsBeginImageContext(size);
[newImage drawInRect:CGRectMake(0,0,size.width,size.height)];
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
myLocationOverlay.imageMap.image = scaledImage;
}下面是对任务进行排队的代码。
...
mapImageDrawQueue = dispatch_queue_create("mapImage.drawQueue", NULL);
(void)captureScrollViewImageForLayoverViewWrapper {
// multithreaded approach to draw map
dispatch_async(mapImageDrawQueue, ^{ [self captureScrollViewImageForLayoverView]; });
}发布于 2012-06-21 18:46:06
我曾经在我的应用程序中加载队列中的图像,与您提到的问题相同。我查看了官方的编程指南,记得它告诉我,它不能保证队列在你调用它后立即运行。所以我使用NSThread来做这项工作,它工作得很好:
NSThread* myThread = [[NSThread alloc] initWithTarget:self
selector:@selector(captureScrollViewImageForLayoverView)
object:nil];
[myThread start];请记住,将以下行添加到函数captureScrollViewImageForLayoverView:
顶部:末尾的NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];:[pool release];
查看此文档以了解更多信息- Threading Programming Guide希望它能有所帮助。
https://stackoverflow.com/questions/11136085
复制相似问题