【发布时间】: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