4

私はこの方法でviewcontrollerを作成しています:

 UIStoryboard *sb = [UIStoryboard storyboardWithName:@"PhotoViewControlleriPhone" bundle:nil];
                                UIViewController *vc = [sb instantiateInitialViewController];

                               vc.view.backgroundColor = [UIColor clearColor];
                               self.modalPresentationStyle = UIModalPresentationCurrentContext;

                               [self presentModalViewController:vc animated:NO];

                               vc.view.frame = CGRectMake(imageView.frame.origin.x, imageView.frame.origin.y + 64, imageView.frame.size.width, 200.000000);

                               vc.view.layer.cornerRadius = 10; // this value vary as per your desire
                               vc.view.clipsToBounds = YES;

ビューコントローラーは全画面表示ではないため、前のものを引き続き表示できます。見たいけどロックしてね。iOS の Facebook 共有を使用するときと同じように、背景は表示されますが、暗くなり、操作できなくなります。これどうやってするの?

4

3 に答える 3

4

問題は、を使用して表示していることだと思います-presentModalViewController:animated:。このメソッドを使用すると、ホストしているビュー コントローラーに関するいくつかの仮定が伴います。それが行う前提の 1 つは (少なくとも iPhone タイプのデバイスでは)、View Controller が画面全体を占有し、不透明であるということです。

これを回避するには、モーダル ビュー コントローラーのビューを現在のビュー コントローラーのビューに手動で追加してみてください。ビュー階層と一致するようにビュー コントローラー階層を設定する必要があるため、コードは次のようになります。

[self addChildViewController:vc];
[self.view addSubview:vc.view];

入ってくるビューのフレームを調整して新しいスーパービュー内に配置する必要がありますが、これにより自由度が高くなります。

于 2012-12-05T18:08:26.933 に答える
2

iOS8以降

以下のコード スニペットを iOS8 以降に使用できます。

SecondViewController *secondViewController = [[SecondViewController alloc] init];
secondViewController.modalPresentationStyle = UIModalPresentationOverCurrentContext;           
[self presentViewController:secondViewController animated:YES completion:nil];    
于 2017-01-11T07:40:58.550 に答える