iOS делает снимок экрана с проблемой всего экрана

У меня есть собственный вид с изображением:

UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.bounds];
[self setBluredImageView:imageView];        
[self addSubview:imageView];

- (UIImage *)takeSnapshotOfView:(UIView *)view
{
    CGFloat reductionFactor = 1;
    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    return image;
}

В методе, когда я хочу показать свое представление о себе поверх другого представления, я делаю это:

- (void)showMe; {


    AppDelegate* app = [AppDelegate shared];
    [app.window addSubview:self];

    UIImage *image = [self blurWithImageEffects:[self takeSnapshotOfView:app.window]];

    [[self bluredImageView] setImage:image];

    [UIView animateWithDuration:0.4 animations:^{

        [self setAlpha:1.0];

    }];
}

Итак, как вы можете видеть, я хочу размыть «графический контекст», основанный на виде главного окна. В первый раз, когда я представляю свое представление о себе, оно работает идеально, но затем что-то вроде размытого изображения умножает друг друга.

Итак, это изображение, когда я только что впервые показываю свое представление:

введите здесь описание изображения

Когда я представляю свое мнение несколько раз, размытое изображение выглядит так:

введите здесь описание изображения

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

Некоторые методы и категории изображений можно найти здесь .


person Matrosov Alexander    schedule 17.02.2015    source источник
comment
проверили ли вы следующие ответы: stackoverflow.com/questions/18956611/   -  person    schedule 17.02.2015
comment
а также те: stackoverflow.com/questions/ 2200736/   -  person    schedule 17.02.2015


Ответы (1)


Вы создали петлю размытия. Когда вы делаете снимок экрана во второй раз, размытое изображение также появляется на снимке экрана. Вот почему вы видите усиление эффекта. Попробуйте удалить его и зафиксировать только контекст без эффекта, а затем добавить его обратно.

 - (UIImage *)takeSnapshotOfView:(UIView *)view
{
    //Remove the blured image before taking another screenshot.
    [self bluredImageView] removeFromSuperview];
    CGFloat reductionFactor = 1;

    UIGraphicsBeginImageContext(CGSizeMake(view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor));
    [view drawViewHierarchyInRect:CGRectMake(0, 0, view.frame.size.width/reductionFactor, view.frame.size.height/reductionFactor) afterScreenUpdates:YES];
    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    //Add it back now that the effect is done
    [self addSubview:[self bluredImageView];
    return image;
}
person zimmryan    schedule 17.02.2015