【问题标题】:Presenting UIViewController from SKScene?从 SKScene 呈现 UIViewController?
【发布时间】:2015-04-29 00:45:46
【问题描述】:

所以一开始我在使用 Swift/Sprite-Kit 将社交媒体共享实现到我的项目中时遇到了麻烦。我相信我现在已经完成了,但我无法触发方法,或者似乎每个人都在挣扎,我无法从我的 SKScene 中呈现视图控制器。所以我首先要做的是在我的 EndGame 场景上创建我的按钮。然后在我的 touchesEnded 方法中,我调用了 NSNotificationCenter。像这样:

import SpriteKit
import UIKit
import Social

class EndGameScene: SKScene {

var facebookButton: SKNode! = nil
var twitterButton: SKNode! = nil


required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override init(size: CGSize) {
    super.init(size: size)

    // FacebookButton
    facebookButton = SKSpriteNode(imageNamed: "facebookButton")
    facebookButton.position = CGPoint(x: self.size.width * 0.3 , y: self.size.height * 0.45);
    addChild(facebookButton)

    // TwitterButton
    twitterButton = SKSpriteNode(imageNamed: "twitterButton")
    twitterButton.position = CGPoint(x: self.size.width * 0.5 , y: self.size.height * 0.45);
    addChild(twitterButton)


}

override func touchesEnded(touches: NSSet, withEvent event: UIEvent) {

    for touch: AnyObject in touches {

        let location = touch.locationInNode(self)

        if facebookButton.containsPoint(location) {
           NSLog("Button tapped")
           NSNotificationCenter.defaultCenter().postNotificationName("FacebookID", object: nil)

        }

        if twitterButton.containsPoint(location) {
            NSLog("Button tapped")
            NSNotificationCenter.defaultCenter().postNotificationName("TwitterID", object: nil)

        }


    }

}

然后,我使用应该在 NSNotificationCenter 的帮助下触发以显示工作表的方法创建了我的 SocialViewController。这是我使用的代码:

import UIKit
import Social

class SocialViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "showTweetSheet", name: "TwitterID", object: nil)
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "showFacebookSheet", name: "FacebookID", object: nil)
}

func showTweetSheet() {
    let tweetSheet = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
    tweetSheet.completionHandler = {
        result in
        switch result {
        case SLComposeViewControllerResult.Cancelled:
            break
        case SLComposeViewControllerResult.Done:
            break
        }
    }

    tweetSheet.setInitialText("Test Twitter")
    tweetSheet.addImage(UIImage(named: "TestImage.png"))
    tweetSheet.addURL(NSURL(string: "http://twitter.com"))
    self.presentViewController(tweetSheet, animated: false, completion: {
    })
}

func showFacebookSheet() {
    let facebookSheet = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
    facebookSheet.completionHandler = {
        result in
        switch result {
        case SLComposeViewControllerResult.Cancelled:
            break
        case SLComposeViewControllerResult.Done:
            break
        }
    }
    facebookSheet.setInitialText("Test Facebook")
    facebookSheet.addImage(UIImage(named: "TestImage.png")) 
    facebookSheet.addURL(NSURL(string: "http://facebook.com")) 
    self.presentViewController(facebookSheet, animated: false, completion: {
    })
}

我真的不知道我可能遗漏了什么或做错了什么。我已经阅读了几篇关于此的帖子,并且使用 NSNotificationCenter 应该是实现此目的的最佳方法,但似乎对我不起作用。因此,如果有人可以帮助我,我将不胜感激。提前致谢!

【问题讨论】:

    标签: facebook swift twitter sprite-kit


    【解决方案1】:

    您可以从https://github.com/facebook/facebook-android-sdk 下载 Facebook Sdk。在使用您的 cmd 提示符创建密钥哈希之后。有关创建密钥哈希的更多详细信息,请参阅链接https://developers.facebook.com/docs/android/getting-started

    【讨论】:

    • 谢谢!但我希望为 Swift 和 Sprite 套件做到这一点
    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    相关资源
    最近更新 更多