Mit der Veröffentlichung von iOS 8.0 ist es nicht mehr erforderlich, ein Bild abzurufen und zu verwischen. Wie Andrew Plummer betonte, können Sie UIVisualEffectView mit UIBlurEffect verwenden .
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];
Lösung, die vor iOS 8 funktioniert
Ich möchte auf die Antwort von rckoenes eingehen:
Wie bereits erwähnt, können Sie diesen Effekt erzielen, indem Sie:
- Konvertieren Sie die zugrunde liegende UIView in ein UIImage
- Verwischen Sie das UIImage
- Legen Sie das UIImage als Hintergrund Ihrer Ansicht fest.
Klingt nach viel Arbeit, ist aber eigentlich ziemlich unkompliziert erledigt:
1. Erstellen Sie eine Kategorie von UIView und fügen Sie die folgende Methode hinzu:
-(UIImage *)convertViewToImage
{
UIGraphicsBeginImageContext(self.bounds.size);
[self drawViewHierarchyInRect:self.bounds afterScreenUpdates:YES];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
2. Erstellen Sie ein Bild der aktuellen Ansicht und verwischen Sie es mithilfe der Bildeffektkategorie von Apple ( Download ).
UIImage* imageOfUnderlyingView = [self.view convertViewToImage];
imageOfUnderlyingView = [imageOfUnderlyingView applyBlurWithRadius:20
tintColor:[UIColor colorWithWhite:1.0 alpha:0.2]
saturationDeltaFactor:1.3
maskImage:nil];
3. Legen Sie es als Hintergrund für Ihre Überlagerung fest.
-(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];
}