У меня есть UIViewController
, который представляет другой UIViewController
по модулю. Я хочу, чтобы контроллер модального представления имел размытие/прозрачность, введенное iOS 7. Я попытался использовать новый UIVisualEffect
, но похоже, что работает только с UIViews
, а не UIViewControllers
?
Вот код, который я написал, все представления, которые я добавил в качестве подзонов, - это то, что я хочу быть в пользовательском интерфейсе над размытым видом под ним.
В представлении контроллера представления, я делаю скриншот экрана, который я передаю в контроллер модального представления, прежде чем применять размытие.
В представлении контроллера представления:
- (UIImage *)viewImage {
CGSize size = CGSizeMake(self.view.frame.size.width,self.view.frame.size.height);
UIGraphicsBeginImageContext(size);
[self.view drawViewHierarchyInRect:(CGRect){CGPointZero, self.view.frame.size.width, self.view.frame.size.height} afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
В контроллере Modal View:
- (void)viewDidLoad {
[super viewDidLoad];
[self.view addSubview:[[UIImageView alloc] initWithImage:self.backgroundImage]];
//self.backgroundImage is the image that the method above returns, it a screenshot of the presenting view controller.
UIBlurEffect *blurEffect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight];
UIVisualEffectView *blurEffectView = [[UIVisualEffectView alloc] initWithEffect:blurEffect];
[blurEffectView setFrame:self.view.bounds];
[self.view addSubview:blurEffectView];
[self.view bringSubviewToFront:self.cancelButton];
[self.view bringSubviewToFront:self.titleLabel];
[self.view bringSubviewToFront:self.tableView];
}