0

我正在使用 Grand Central Dispatch 对任务进行排队以将 a 捕获UIView为图像。除了在队列上运行的图像捕获需要很长时间之外,一切都很好。

有什么办法可以加快速度或提高我的技术。这是捕获和缩放图像的代码,然后将其设置为 aUIImageView的图像以进行显示。

(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]; });
}
4

1 回答 1

0

我曾经在我的应用程序中的队列中加载图像,并遇到您提到的相同问题。我查看了官方编程指南,记得它告诉它不能保证队列在你调用后立即运行。所以我使用 NSThread 完成了这项工作,并且运行良好:

NSThread* myThread = [[NSThread alloc] initWithTarget:self
                                        selector:@selector(captureScrollViewImageForLayoverView)
                                        object:nil];
[myThread start];

请记住将这些行添加到函数 captureScrollViewImageForLayoverView 中:

在顶部:NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 在末尾:[pool release];

查看此文档以了解更多信息 -线程编程指南 希望它有所帮助。

于 2012-06-21T10:46:05.780 回答