7

ユーザーがsksceneでskspritenodeに触れたときに、performseguewithidentifier. 助けてくれてありがとう。私はコードを投稿できますが、それは一般的な質問のように思えるので、何も必要ないと思いました. ちなみに、skspritenodeのタップを検出する方法はすでにわかっています。私はこれを長い間見ていて、困惑しています。助けてください。

4

3 に答える 3

9

実際には SKView でのみレンダリングされているため、SKScene 内から viewController を提示することはできません。SKView の viewController にメッセージを送信する方法が必要です。これにより、viewController が表示されます。これには、委任または NSNotificationCenter を使用できます。

委任

次のプロトコル定義を SKScene の .h ファイルに追加します。

@protocol sceneDelegate <NSObject>
-(void)showDifferentView;
@end

インターフェイスでデリゲート プロパティを宣言します。

@property (weak, nonatomic) id <sceneDelegate> delegate;

次に、共有画面を表示するポイントで、次の行を使用します。

[self.delegate showDifferentView];

ここで、viewController の .h ファイルにプロトコルを実装します。

@interface ViewController : UIViewController <sceneDelegate>

そして、.m ファイルで、シーンを表示する前に次の行を追加します。

scene.delegate = self;

次に、そこに次のメソッドを追加します。

-(void)showDifferentView
{
    [self performSegueWithIdentifier:@"whateverIdentifier"];
}

NSNotificationCenter

-showDifferentView メソッドは、前の代替方法で説明したとおりにしておきます。

-viewDidLoad メソッドで viewController をリスナーとして通知に追加します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showDifferentView) name:@"showDifferenView" object:nil];

次に、この viewController を表示するシーンで、次の行を使用します。

[[NSNotificationCenter defaultCenter] postNotificationName:@"showDifferentView" object:nil];
于 2014-03-21T10:15:26.697 に答える
0

ZeMoon さん、いい回答ですが、設定画面など、複数のシーンで同じビュー コントローラーを表示したい場合はどうすればよいでしょうか? 同じことを行う複数のシーン デリゲート プロトコルを定義する必要はありません。

もう 1 つのアイデアは、さまざまなビュー コントローラーの表示を処理する単一のプロトコルを定義することです。

@protocol ScreenFlowController <NSObject>
- (void)presentSettingsScreenFromScene:(SKScene *)scene;
- (void)presentCreditsScreenFromScene:(SKScene *)scene;
@end

シーン パラメーターを使用して、出身地に基づいて決定を下すことができます。

ゲーム (またはその他のオブジェクト) のビュー コントローラーがプロトコルを実装します。異なる画面を表示するすべてのシーンは、コントローラーへの弱参照を受け取ります。

@property (nonatomic, weak) id<ScreenFlowController> screenFlowController;
于 2016-02-01T12:15:30.733 に答える