З виходом iOS 8.0 немає необхідності отримувати зображення та розмивати його більше. Як зазначив Ендрю Пламмер , ви можете використовувати UIVisualEffectView з UIBlurEffect .
UIViewController * contributeViewController = [[UIViewController alloc] init];
UIBlurEffect * blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *beView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
beView.frame = self.view.bounds;
contributeViewController.view.frame = self.view.bounds;
contributeViewController.view.backgroundColor = [UIColor clearColor];
[contributeViewController.view insertSubview:beView atIndex:0];
contributeViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;
[self presentViewController:contributeViewController animated:YES completion:nil];
Рішення, яке працює до iOS 8
Я хотів би продовжити відповідь rckoenes:
Як підкреслювалося, ви можете створити цей ефект, виконавши:
- Перетворити базовий UIView на UIImage
- Розмийте UIImage
- Встановіть UIImage як фон вашого перегляду.
Звучить багато роботи, але насправді виконується досить прямо:
1. Створіть категорію UIView та додайте такий спосіб:
-(UIImage *)convertViewToImage
{
UIGraphicsBeginImageContext(self.bounds.size);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2. Створіть зображення поточного вигляду і розмийте його за допомогою категорії Image Effect від Apple ( завантажити )
UIImage* imageOfUnderlyingView = [self.view convertViewToImage];
imageOfUnderlyingView = [imageOfUnderlyingView applyBlurWithRadius:20
tintColor:[UIColor colorWithWhite:1.0 alpha:0.2]
saturationDeltaFactor:1.3
maskImage:nil];
3. Встановіть його як фон вашого накладання.
-(void)viewDidLoad
{
self.view.backgroundColor = [UIColor clearColor];
UIImageView* backView = [[UIImageView alloc] initWithFrame:self.view.frame];
backView.image = imageOfUnderlyingView;
backView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
[self.view addSubview:backView];
}