Ios7 如何向SKscene的UIViewController演示社交框架?

Ios7 如何向SKscene的UIViewController演示社交框架?,ios7,uiviewcontroller,sprite-kit,flappy-bird-clone,skscene,Ios7,Uiviewcontroller,Sprite Kit,Flappy Bird Clone,Skscene,我正在做一个像飞鸟一样的游戏。如何从SKScene演示UIViewController? 首先,我告诉我的环境 MacOSX10.9 Xcode 5.0.2 Sprite工具包(框架)、social.framework(框架)已添加到我的项目中 我的目标是在游戏结束时显示一个“共享”按钮。点击共享按钮图像应显示SLComposeViewController(Twitter共享)。场景内容不应更改。 我想解决下面的问题,并将显示从GameOverScene更改为tweetSheet(显示) 由

我正在做一个像飞鸟一样的游戏。如何从SKScene演示UIViewController? 首先,我告诉我的环境

  • MacOSX10.9
  • Xcode 5.0.2
  • Sprite工具包(框架)、social.framework(框架)已添加到我的项目中
我的目标是在游戏结束时显示一个“共享”按钮。点击共享按钮图像应显示SLComposeViewController(Twitter共享)。场景内容不应更改。
我想解决下面的问题,并将显示从GameOverScene更改为tweetSheet(显示) 由社会框架组成

问题

[self presentViewController:tweetSheet animated:YES completion:nil];
//Error:No visible @interface for 'GameOverScene' declares the selector "presentViewController":animated:completion:

下面是我的编码文件(我提取了部分重要代码)

ViewController.h

import <UIKit/UIKit.h>
import <SpriteKit/SpriteKit.h>
import <iAd/iAd.h>

@interface ViewController : UIViewController<ADBannerViewDelegate><br>

@end

不能从SKView场景中显示viewController,因为它实际上仅在SKView上渲染。您需要一种向viewController发送消息的方法,而viewController将显示viewController。为此,您可以使用委托

将以下协议定义添加到SKScene的.h文件中:

@protocol sceneDelegate <NSObject>
-(void)showShareScreen;
@end
使用此行:

[self.delegate showShareScreen];
现在,在viewController的.h文件中,实现以下协议:

@interface ViewController : UIViewController <sceneDelegate>
然后在此处添加以下方法:

-(void)presentShareScreen
{

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
    {
        SLComposeViewController *tweetSheet = [SLComposeViewController
        composeViewControllerForServiceType:SLServiceTypeTwitter];
        [tweetSheet setInitialText:@"TestTweet from the Game !!"];
        [self presentViewController:tweetSheet animated:YES completion:nil];

    }
}
另一种方法是使用NSNotificationCenter

保持前一备选方案中所述的
-presentShareScreen
方法

将viewController作为侦听器添加到其
-viewDidLoad
方法中的通知中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentShareScreen) name:@"showShareScreen" object:nil];
然后,在场景中要显示此viewController的点处,使用以下行:

[self.delegate showShareScreen];

[[NSNotificationCenter defaultCenter]postNotificationName:@“showShareScreen”对象:nil]

这里粘贴了很多代码,我怀疑有人会读到这些。阅读本指南,了解如何最好地展示您的问题:该过程也有助于您更好地理解问题。重复[[1]:>>Henrik谢谢你的建议!!这是我第一次提交我的问题。如果你感到生气,我很抱歉。我将使用你的有用建议,非常感谢,先生。>>谢谢你的建议。不过我是Xcode的初学者。我知道这篇文章,读得越来越多,但我无法理解nd,虽然…所以,我提交了这个问题。你认为我该怎么做才能阅读这篇文章???@tomojiro别担心,不要生气,只是想帮助第一次的海报改进这个问题以获得更多答案。:)我很高兴看到你的答案,谢谢。但是,我不知道如何使用下面这句话scene.delegate=self;我应该在.m文件中使用它吗?当我在ViewController.m文件中使用它时,它不起作用。它的意思是,在类型为“SKScene”的对象上找不到属性“delegate”你需要在你的游戏界面定义之前添加协议我现在很困惑…我应该搜索SKScene并将协议添加到SKScene的文件中。我将协议添加到SKScene的子类中,如“@interface mainsene:SKScene”我现在很困惑,但我会尽力:)嗯…我替换了[self.delegate showShareScreen];到我的GameOverScene.m是twitter方法。但是,我的ViewController.m不委托该方法(showShareScreen)。它工作了,但没有委托,因为当我在showShareScreen方法中使用断点时,它没有停止…我可以问一下原因吗???顺便说一句,使用scene.delegate=self;我从GameOverScene的实例中创建了一个实例。它可能对我有效。@tomojiro我为这个问题添加了一个更简单的替代方法。
[self.delegate showShareScreen];
@interface ViewController : UIViewController <sceneDelegate>
scene.delegate = self;
-(void)presentShareScreen
{

    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
    {
        SLComposeViewController *tweetSheet = [SLComposeViewController
        composeViewControllerForServiceType:SLServiceTypeTwitter];
        [tweetSheet setInitialText:@"TestTweet from the Game !!"];
        [self presentViewController:tweetSheet animated:YES completion:nil];

    }
}
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentShareScreen) name:@"showShareScreen" object:nil];