Blur for UIImage + GCD

Рейтинг: 0Ответов: 1Опубликовано: 08.01.2015

Добрый день.

Стоит задача заблюрить картинки, но проблема в том, что их может быть от 1 до 100. Использую вот этот гайд для создание эффекта: http://uncorkedstudios.com/blog/ios-7-background-effects-and-split-view-controllers

Блюр етсь, но, естественно, весь интерфейс застыл. Время застывания пропорционально количеству картинок.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
                UIGraphicsBeginImageContextWithOptions(self.bounds.size, NO, self.window.screen.scale);
                [self drawViewHierarchyInRect:self.frame afterScreenUpdates:NO];
                UIImage *blurredImage = [backgroundImage applyBlurWithRadius:20 tintColor:[UIColor clearColor] saturationDeltaFactor:1 maskImage:nil];
                UIGraphicsEndImageContext();

                dispatch_sync(dispatch_get_main_queue(), ^{

                    blurredBackgroundImage = blurredImage;
                    [blurredBackgroundImageView setImage:blurredBackgroundImage];
                    [_foregroundTableView setContentOffset:CGPointMake(0, 0) animated:YES];

                });
            });

Сделал поток, главный интерфейс не тормозит, но проблема в том, что программа падает, когда картинок больше, чем 10. Большой скачок памяти до 800 метров и выше.

Помогите правильно разбить на потоки, чтоб картинки блюрились постепенно в потоке и программа не падала.

Спасибо.

Ответы

▲ 2Принят

Используйте NSOperationQueue для мультитрединга, установите количество синхронных очередей, как Вам нужно. И старайтесь блурить картинки при помощи GPU, утилита в помощь