swift spritekit Facebook的分享按钮
嘿那里我的应用程序几乎准备好发布,但我想添加Facebook分享按钮。事情是我不知道场景和viewcontroler之间的沟通是如何工作的。我做了我的研究,但只发现在OBJ-C代码这样一个swift spritekit Facebook的分享按钮
- (void)lkFaceBookShare {
NSString *serviceType = SLServiceTypeFacebook;
if (![SLComposeViewController isAvailableForServiceType:serviceType])
{
[self showUnavailableAlertForServiceType:serviceType];
}
else
{
SLComposeViewController *composeViewController = [SLComposeViewController composeViewControllerForServiceType:serviceType];
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
CGRect rect = [keyWindow bounds];
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.5f);
[self.view drawViewHierarchyInRect:rect afterScreenUpdates:YES];
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[composeViewController addImage:viewImage];
NSString *initalTextString = [NSString stringWithFormat:@"Let's join together in the form of underground catch word go along with me!! Link: https://itunes.apple.com/us/app/uoi-hinh-bat-chu-gioi-duoi/id907330926?ls=1&mt=8"];
[composeViewController setInitialText:initalTextString];
UIViewController *vc = self.view.window.rootViewController;
[vc presentViewController:composeViewController animated:YES completion:nil];
}
}
- (void)showUnavailableAlertForServiceType:(NSString *)serviceType
{
NSString *serviceName = @"";
if (serviceType == SLServiceTypeFacebook)
{
serviceName = @"Facebook";
}
else if (serviceType == SLServiceTypeSinaWeibo)
{
serviceName = @"Sina Weibo";
}
else if (serviceType == SLServiceTypeTwitter)
{
serviceName = @"Twitter";
}
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Account"
message:[NSString stringWithFormat:@"Please go to the device settings and add a %@ account in order to share through that service", serviceName]
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles:nil];
[alertView show];
}
我的经验和知识太低端口这也太迅速,所以我需要一些帮助,这d:
感谢
这是我前段时间为twitter所做的一些代码,它仍然可以快速运行。我向你展示如何将它转换为下面的Facebook。将这个您的viewController:
func showTweetSheet() {
let tweetSheet = SLComposeViewController(forServiceType: SLServiceTypeTwitter)
tweetSheet.completionHandler = {
result in
switch result {
case SLComposeViewControllerResult.Cancelled:
//Add code to deal with it being cancelled
break
case SLComposeViewControllerResult.Done:
//Add code here to deal with it being completed
//Remember that dimissing the view is done for you, and sending the tweet to social media is automatic too. You could use this to give in game rewards?
break
}
}
tweetSheet.setInitialText("Test Twitter") //The default text in the tweet
tweetSheet.addImage(UIImage(named: "TestImage.png")) //Add an image if you like?
tweetSheet.addURL(NSURL(string: "http://twitter.com")) //A url which takes you into safari if tapped on
self.presentViewController(tweetSheet, animated: false, completion: {
//Optional completion statement
})
}
要将其转换至Facebook,只需简单更换SLServiceTypeTwitter
到SLServiceTypeFacebook
并重命名变量可读性。如果你想从SKScene调用这个方法,你必须以某种方式提醒viewController你想调用一个方法。
我的首选方法是使用NSNotificationCenter,以便从场景发布警报,并由viewController接收,以便它触发一个方法。这也非常容易设置。在这个场景中,你需要把下面这行代码放到你想要调用Facebook的地方:
NSNotificationCenter.defaultCenter().postNotificationName("WhateverYouWantToCallTheNotification", object: nil)
这会发出一个带有名字的通知。现在,在viewController中,您需要通过将以下代码放入viewDidLoad,viewDidAppear或类似内容来订阅此警报。
NSNotificationCenter.defaultCenter().addObserver(self, selector: "ThisIsTheMethodName", name: "WhateverYouCalledTheAlertInTheOtherLineOfCode", object: nil)
现在,场景将与viewController进行通信,您将能够显示Facebook工作表。请记住将我的字符串替换为与您的项目相关的字符串。希望这会有所帮助 - 对不起,这是一个很长的答案!
我可以使用Facebook徽标作为分享按钮吗?非常有用的了解了我需要的所有东西。thx – 2014-09-02 18:43:51
@BasileBerckmoes我查了一下,你可以在4个(也只有4个)场景中使用“f”标志。如果你将它用于别的东西,你会违反规则。制作你想要的内容: 1.指您在Facebook上的存在,如您的Page,时间轴,群组,应用程序或事件 2.在您的网站/应用程序中暗示您实施Facebook 3.您的产品与Facebook,如'用于Facebook' 4.来自Facebook的内容 – 2014-09-02 18:47:35
@BasileBerckmoes然而,如果您使用多个社交媒体(如twitter)并将徽标并排放置,那么您可以做你喜欢什么图标 - 并且规则不再适用。不知道为什么这样,但我个人会利用它,并使用我发布的相同代码添加到twitter中 - 这样您就不会违反任何版权法。希望能够解决问题。查看这个网站,了解几乎所有可能合并的公司的信息。http://www.qualitylogoproducts.com/blog/social-media-logos-promotional-items/ – 2014-09-02 18:52:32
func lkFaceBookShare() {
var serviceType: String = SLServiceTypeFacebook
if !SLComposeViewController.isAvailableForServiceType(serviceType) {
self.showUnavailableAlertForServiceType(serviceType)
}
else {
var composeViewController: SLComposeViewController = SLComposeViewController.composeViewControllerForServiceType(serviceType)
var keyWindow: UIWindow = UIApplication.sharedApplication().keyWindow
var rect: CGRect = keyWindow.bounds
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, false, 0.5)
self.view!.drawViewHierarchyInRect(rect, afterScreenUpdates: true)
var viewImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
composeViewController.addImage(viewImage)
var initalTextString: String = String(format: "Let's join together in the form of underground catch word go along with me!! Link: https://itunes.apple.com/us/app/uoi-hinh-bat-chu-gioi-duoi/id907330926?ls=1&mt=8")
composeViewController.initialText = initalTextString
var vc: UIViewController = self.view.window.rootViewController
vc.presentViewController(composeViewController, animated: true, completion: { _ in })
}
}
func showUnavailableAlertForServiceType(serviceType: String) {
var serviceName: String = ""
if serviceType == SLServiceTypeFacebook {
serviceName = "Facebook"
}
else if serviceType == SLServiceTypeSinaWeibo {
serviceName = "Sina Weibo"
}
else if serviceType == SLServiceTypeTwitter {
serviceName = "Twitter"
}
var alertView: UIAlertView = UIAlertView(title: "Account", message: "Please go to the device settings and add a \(serviceName) account in order to share through that service", delegate: nil, cancelButtonTitle: "Dismiss", otherButtonTitles: "")
alertView.show()
}
张贴由非常有帮助用户的OBJ-C答案的夫特转换...... original post
[夫特和在同一项目中的Objective-C](https://developer.apple。 com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html),他们很容易在Swift中使用现有的Objective-C类。 – chuckus 2014-08-31 19:57:02