ユーザーがsksceneでskspritenodeに触れたときに、performseguewithidentifier
. 助けてくれてありがとう。私はコードを投稿できますが、それは一般的な質問のように思えるので、何も必要ないと思いました. ちなみに、skspritenodeのタップを検出する方法はすでにわかっています。私はこれを長い間見ていて、困惑しています。助けてください。
3 に答える
実際には 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];
ZeMoon さん、いい回答ですが、設定画面など、複数のシーンで同じビュー コントローラーを表示したい場合はどうすればよいでしょうか? 同じことを行う複数のシーン デリゲート プロトコルを定義する必要はありません。
もう 1 つのアイデアは、さまざまなビュー コントローラーの表示を処理する単一のプロトコルを定義することです。
@protocol ScreenFlowController <NSObject>
- (void)presentSettingsScreenFromScene:(SKScene *)scene;
- (void)presentCreditsScreenFromScene:(SKScene *)scene;
@end
シーン パラメーターを使用して、出身地に基づいて決定を下すことができます。
ゲーム (またはその他のオブジェクト) のビュー コントローラーがプロトコルを実装します。異なる画面を表示するすべてのシーンは、コントローラーへの弱参照を受け取ります。
@property (nonatomic, weak) id<ScreenFlowController> screenFlowController;