Я использую Grand Central Dispatch, чтобы поставить в очередь задачу захватить UIView
в качестве изображения. Все отлично работает с этим, за исключением того, что захват изображения, выполняющийся в очереди, занимает довольно много времени.Использование многопоточности для захвата изображения 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]; });
}
Благодарим вас за ответ. Я обязательно сделаю это и дам вам знать, как это работает. – Jomnipotent17
Добро пожаловать, надеюсь, что это сработает. : D – Tom
Эй, я, наконец, обдумал это. Поэтому я использую ARC, поэтому он говорит мне, что я не могу объявить NSAutoreleasePool. Есть ли что-то еще, что нужно сделать вместо этого, или я могу просто опустить эти строки? – Jomnipotent17