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.
Add the following protocol definition to your SKScene's .h file:
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:
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:
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];