5

私は iOS ゲームを作成しており、この効果を実現したいと考えています。 一時停止ポップアップ 2 つの異なるコントローラー

1つのView Controllerを使用してそれを行う方法は知っていますが、私のView Controllerクラスはすでにコードで肥大化しており、その画面のストーリーボードは混乱しています(実際には上の画像よりも多くのビューがあり、わかりやすくするために非表示にしています)。

私の質問は次のとおりです。この一時停止ポップオーバーを管理するために別のView Controllerを使用してこれを達成する方法はありますか? 前に表示された画面を閉じないセグエが必要です。ストーリーボードを使用してそれを行いたいです。「ポップオーバー」セグエを試しましたが、望ましくない奇妙な境界線が表示されました。

また、一時停止ビューコントローラーによって管理されていないすべてのコントロールがイベントのリッスンを停止する必要があります。画面全体を覆う黒透明のビューを一時停止ビューの BG として使用し、イベントを無視できるようにすることを考えました。より良いアプローチはありますか?

前もって感謝します。

4

4 に答える 4

16

ストーリーボードを使用して実現したい場合は、非常に簡単です。

サンプルコードを添付します

1 - ストーリーボードでカスタム PauseViewController を作成します。フルスクリーン ビュー、黒色、アルファ 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 をサブクラス化し、独自のセグエ クラスを作成します。次に、このようなもので 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 - セグエをリンクし、カスタムを選択して、カスタム セグエ クラス名を挿入します。

たぁぁぁぁぁ!

他の詳細が必要な場合は、サンプル コードを確認するか、コメントを追加してください。

于 2013-05-01T20:55:15.907 に答える
0

UIStoryboardSegue サブクラスに関連する回答のバリエーションとして、透明な 1x1 の「blank.png」画像を使用することもできます。そうすれば、ポップアップのビュー コントローラのサブビューのアルファのみを気にする必要があるため、必要に応じて中央のポップアップを完全に表示できます。

    -(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;
        dst.view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"blank.png"]];

        [UIView animateWithDuration:0.3f animations:^{
            dst.view.alpha = 1;
        }];
    }
于 2013-08-27T21:11:31.647 に答える