У меня есть собственный вид с изображением:
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];
}];
}
Итак, как вы можете видеть, я хочу размыть «графический контекст», основанный на виде главного окна. В первый раз, когда я представляю свое представление о себе, оно работает идеально, но затем что-то вроде размытого изображения умножает друг друга.
Итак, это изображение, когда я только что впервые показываю свое представление:
Когда я представляю свое мнение несколько раз, размытое изображение выглядит так:
Итак, как вы можете видеть, каждый раз размытый снимок экрана отличается, но я использую один и тот же метод для получения снимка экрана и не обновляю содержимое контроллера представления или других частей пользовательского интерфейса.
Некоторые методы и категории изображений можно найти здесь .