1

MKMapViewコールアウトバブルをクリックすると、

DetailsViewController *details = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
[self presentModalViewController:details animated:YES];
[details release];

DetailsViewControllerで、背景を透明に設定しました。

self.view.backgroundColor = [UIColor colorWithHue:0.0 saturation:0.0 brightness:1.0 alpha:0.2];

コールアウトをクリックすると、アニメーションが開始されます(DetailsViewが表示され、透明になります)が、アニメーションが完了すると、アニメーションは透明ではなくなります。

4

1 に答える 1

3

問題は、新しいビューを表示すると、画面が制御されるため、背景ビューが消えてしまうことです。

この動作は正しいです。常に新しいビューを開いてスタックし続けると想像してください。OSはすべてのビューをバックグラウンドで保持することはできません。それは単に作ってから消えるだけです。

新しいビューコントローラを表示して画面を制御する代わりに、最初のビューの上にビューを表示することができます。

このようなものを試してみて、どうなるか教えてください(ここでコードを作成したばかりなので、動作を保証することはできませんが、確実にアイデアが得られます):

   DetailsViewController *details = [[DetailsViewController alloc] initWithNibName:@"DetailsViewController" bundle:nil];
    details.view.frame = self.view.frame;
    details.view.backgroundColor = [UIColor colorWithHue:0.0 saturation:0.0 brightness:1.0 alpha:0.2];
    [self.view addSubview:details.view];
    [details release];

私は以前にこれを行ったことがあり、その可能性はありますが、アプリの安定性を保証することはできません。

他の「よりクリーンな」ソリューションは、新しいビューを古いビューの一部にすることです。下部(非表示)に設定できるので、ユーザーには表示されません。必要な場合は、アニメーションを使用してメイン画面に配置します。問題は、2つのコントローラーを1つにマージすることです。

于 2012-06-15T07:31:43.957 に答える