How do I go from SKScene to UIViewController by code?

前端 未结 3 1552
盖世英雄少女心
盖世英雄少女心 2020-11-30 08:24

All I want if for when the user touches a skspritenode in the skscene, it will go to a different view like performseguewithidentifier. Thanks for any help. I ca

3条回答
  •  伪装坚强ぢ
    2020-11-30 08:55

    You cannot present a viewController from within a SKScene as it is actually only being rendered on a SKView. You need a way to send a message to the SKView's viewController, which in turn will present the viewController. For this, you can use delegation or NSNotificationCenter.

    Delegation

    Add the following protocol definition to your SKScene's .h file:

    @protocol sceneDelegate 
    -(void)showDifferentView;
    @end
    

    And declare a delegate property in the interface:

    @property (weak, nonatomic) id  delegate;
    

    Then, at the point where you want to present the share screen, use this line:

    [self.delegate showDifferentView];
    

    Now, in your viewController's .h file, implement the protocol:

    @interface ViewController : UIViewController 
    

    And, in your .m file, add the following line before you present the scene:

    scene.delegate = self;
    

    Then add the following method there:

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

    NSNotificationCenter

    Keep the -showDifferentView method as described in the previous alternative.

    Add the viewController as a listener to the notification in it's -viewDidLoad method:

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

    Then, in the scene at the point where you want to show this viewController, use this line:

    [[NSNotificationCenter defaultCenter] postNotificationName:@"showDifferentView" object:nil];
    

提交回复
热议问题