2015-04-26 4 views
2

Я хочу реализовать функцию share в моей игре SpriteKit. У меня есть кнопка для этого, и я пытаюсь сделать это в Gamescene. Вот код, который я нашел для этого:Почему Xcode не позволяет мне использовать presentViewController?

func handleTwitter(sender: AnyObject) { 
// Check if Twitter is available 
if(SLComposeViewController.isAvailableForServiceType(SLServiceTypeTwitter)) { 
// Create the tweet 
let tweet = SLComposeViewController(forServiceType: SLServiceTypeTwitter) 
tweet.setInitialText("I want to share this App: ") 
tweet.addImage(UIImage(named: "shareImage")) 
self.presentViewController(tweet, animated: true, completion: nil) 

Это выглядит очень логично, но у меня есть проблема в

self.presentViewController(tweet, animated: true, completion: nil) 

Xcode рассказывает мне, что GameScene doesn't have a member called "presentViewController". Нужно ли реализовать этот код только в GameViewController.swift? Если да, то как я могу использовать его в игровой сцене и других? У меня две сцены с общими кнопками. Или вопрос находится в SLComposeViewController? Я не понимаю, в чем проблема, нужно ли объявлять своего делегата в GameScene, чтобы он работал?

+1

Вот так, вы не можете присутствовать ViewController для сцены, вы можете presentViewController от ViewController. если вы хотите представить его, вы должны делегировать свою сцену вашему viewacontroller и представить его. – ColdSteel

+0

Не могли бы вы объяснить, как это сделать? Какой делегат я должен объявить и где? – Burundanga

+0

Что мне с этим делать? Я не понимаю! – Burundanga

ответ

0

Так что для тех, кто страдает от этой проблемы. Ответ:

func handleTwitter() должно быть в GameViewController. Тогда в viewDidLoad вам нужно разместить NSNotification:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "handleTwitter", name: "tweet", object: nil) 
//You can use any name in the name field 
//selector should be the name of a function without braces 
//that you want to pass to other scenes 

Тогда вы должны пойти к вашему GameScene или GameOverScene или что-то и сделать глобальную функцию, которая отвечает на этот NSNotification:

func gameOvetTweet() { 
    NSNotificationCenter.defaultCenter().postNotificationName("tweet", object: nil) 
} 
//make sure that name in 'postNotificationName("THIS NAME"...' 
//is matching name that you've passed in GameViewController. 
//In this example it is "tweet" 

И тогда единственное, что остается сделать - это разместить свою функцию там, где вы хотите. Например:

if self.nodeAtPoint(location) == self.twitterButton { 
      gameOverTweet() 
     } 

Это все. Я также использую его для рекламы.

0

Вот код, который работает для меня.

UIViewController *vc = self.view.window.rootViewController; 
[vc presentViewController:tweet animated:YES completion:nil]; 

Надеется, что это помогает

+0

Где мы должны будем использовать этот код? – Emm

+0

Я имею в виду, можете ли вы показать больше информации, как использовать где и полный код? – Emm

+0

это не так быстро? –

0

Любое использование скор: self.view?.window?.rootViewController!.presentViewController(viewController!, animated: true, completion: nil)

Смежные вопросы