あなたはストーリーボードを使用して、それを実現したい場合は、それは非常に簡単です。
私はexample code
1を添付 - ストーリーボードにカスタムPauseViewControllerを作成します。 Alpha 0のフルスクリーン表示、黒色、一時停止コントロールを含むサブビューを使用します。対応する.hと.mファイルを作成する
2 - コントロール(UIButtons)を追加してリンクします。このような解消メソッドを追加してください。 このメソッドは、階層からビューを削除し、表示解除しても表示されないようにします。
- (IBAction)dismiss:(id)sender {
[UIView animateWithDuration:0.3f animations:^{
self.view.alpha = 0.0f;
} completion:^(BOOL finished) {
[self.view removeFromSuperview];
[self removeFromParentViewController];
}];
}
3 - サブクラスUIStoryboardSegue独自のsegueクラスを作成します。 次に、performメソッドを次のようにオーバーライドします。これは、2つのコントローラ(送信元と送信先)を取り、送信先ビューをアニメーションとともにソースビューに配置するだけです。
-(void)perform{
UIViewController *dst = [self destinationViewController];
UIViewController *src = [self sourceViewController];
// add the view to the hierarchy and bring to front
[src addChildViewController:dst];
[src.view addSubview:dst.view];
[src.view bringSubviewToFront:dst.view];
// set the view frame
CGRect frame;
frame.size.height = src.view.frame.size.height;
frame.size.width = src.view.frame.size.width;
frame.origin.x = src.view.bounds.origin.x;
frame.origin.y = src.view.bounds.origin.y;
dst.view.frame = frame;
[UIView animateWithDuration:0.3f animations:^{
dst.view.alpha = 0.5f;
}];
}
4 - あなたのsegueをリンクし、カスタムを選択し、カスタムsegueクラス名を挿入します。
Ta-daaaa!
その他の詳細が必要な場合は、サンプルコードを確認するかコメントを追加してください。
これはコンテナコントローラの作成によく似ています。 iosがコンテナコントローラを提供したときにこれを行う必要はありません。以下の私の答えを参照してください –
彼は特別なカスタムソリューションを求めました。これはクリーンで再利用可能です。彼は任意のviewController(必要に応じて)からsegueをトリガーすることができます。あるいは、他のVCを表示するためにカスタムセグを再利用することもできます。コントローラコードからアニメーション部分(セグエートランジション)を分離します。分離は、より清潔で保守可能なコードの鍵です。 – LombaX
もっと明確にするために、彼は元のシーンに埋め込まれていないものを求め、より複雑にすることを避けました。そこで、彼は可能な解決策に制限を設けました。さもなければ、より簡単な解決策はサブビュー(vc全体ではない)だけを追加し、必要に応じて表示/非表示にすることでした。 – LombaX