首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用多线程技术实现UIView图像的捕获

利用多线程技术实现UIView图像的捕获
EN

Stack Overflow用户
提问于 2012-06-21 18:20:15
回答 1查看 271关注 0票数 0

我正在使用中央调度将一个任务排入队列,以捕获UIView作为映像。除了在队列上运行图像捕获需要相当长的时间之外,一切都运行得很好。

有没有什么方法可以加快速度或者提高我的技术。下面是捕获和缩放图像的代码,然后将其设置为UIImageView的图像以供显示。

代码语言:javascript
复制
(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;
}

下面是对任务进行排队的代码。

代码语言:javascript
复制
...
mapImageDrawQueue = dispatch_queue_create("mapImage.drawQueue", NULL);

(void)captureScrollViewImageForLayoverViewWrapper {
    // multithreaded approach to draw map
    dispatch_async(mapImageDrawQueue, ^{ [self captureScrollViewImageForLayoverView]; });
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-21 18:46:06

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

代码语言:javascript
复制
NSThread* myThread = [[NSThread alloc] initWithTarget:self
                                        selector:@selector(captureScrollViewImageForLayoverView)
                                        object:nil];
[myThread start];

请记住,将以下行添加到函数captureScrollViewImageForLayoverView:

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

查看此文档以了解更多信息- Threading Programming Guide希望它能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11136085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档