Das ist ziemlich alt, aber ich habe das gleiche Problem wie folgt gelöst: Da ich einen Navigationscontroller auf dem iPhone präsentieren muss, war das Hinzufügen einer Unteransicht keine praktikable Lösung.
Also, was ich getan habe:
1) Machen Sie vor der Präsentation des View Controllers einen Screenshot Ihres aktuellen Bildschirms:
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * backgroundImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
2) Erstellen Sie den Ansichts-Controller, den Sie präsentieren möchten, und fügen Sie den Hintergrund als Unteransicht hinzu, um ihn an zurück zu senden.
UIViewController * presentingVC = [UIViewController new];
UIImageView * backgroundImageOfPreviousScreen = [[UIImageView alloc] initWithImage:backgroundImage];
[presentingVC.view addSubview:backgroundImageOfPreviousScreen];
[presentingVC.view sendSubviewToBack:backgroundImageOfPreviousScreen];
3) Präsentieren Sie Ihren Ansichts-Controller, aber fügen Sie zuvor im neuen Ansichts-Controller eine transparente Ansicht in viewDidLoad hinzu (ich habe ILTranslucentView verwendet).
-(void)viewDidLoad
{
[super viewDidLoad];
ILTranslucentView * translucentView = [[ILTranslucentView alloc] initWithFrame:self.view.frame];
[self.view addSubview:translucentView];
[self.view sendSubviewToBack:translucentView];
}
Und das ist alles!