2015-01-13 7 views
7

Ich entwickle einen Teil einer App, sodass Sie beim Tippen auf die Schaltfläche zum Teilen sofort einen Screenshot Ihres Highscore mit einer Nachricht teilen können. Ich war nicht in der Lage, einen Screenshot zu erstellen/teilen, und wenn ich auf die Schaltfläche share tippe, erlaubt mir die App nur, meinen Standardtext oder "Mail" meinen Standardtext zu kopieren, so dass ich nicht auf Facebook, Twitter, Nachrichten posten kann , und mehr.Einen Screenshot im Aktivitätsansicht-Controller freigeben - Swift

func shareButtonPress() { 

    var postPhrase = "Just hit \(highscore)! Beat it! #SwypIt" 

    //Generate the screenshot 
    UIGraphicsBeginImageContext(view.frame.size) 
    view.layer.renderInContext(UIGraphicsGetCurrentContext()) 
    var image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    var postImage = UIImage(named: "\(image)") 

    var activityViewController : UIActivityViewController = UIActivityViewController(activityItems: [postPhrase, postImage!], applicationActivities: nil) 

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

} 

Was ist der beste Weg, um darüber zu gehen? Vielen Dank!

Antwort

10

Dies ist, wie ich in meiner app Griff zu teilen.

func socialShare(#sharingText: String?, sharingImage: UIImage?, sharingURL: NSURL?) { 
    var sharingItems = [AnyObject]() 

    if let text = sharingText { 
     sharingItems.append(text) 
    } 
    if let image = sharingImage { 
     sharingItems.append(image) 
    } 
    if let url = sharingURL { 
     sharingItems.append(url) 
    } 

    let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil) 
    activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo] 
    self.presentViewController(activityViewController, animated: true, completion: nil) 
} 

Ich habe eine Reihe von Freigabeoptionen mit .excludedActvityTypes ausgeschlossen.

Dann, wenn Sie die Share-Taste getroffen haben es diese

nennen
socialShare(sharingText: "Just hit \(highscore)! Beat it! #SwypI", sharingImage: UIImage(named: "The screenshot you are saving"), sharingURL: NSURL(string: "http://itunes.apple.com/app/")) 

Der Grund, warum Sie nicht Twitter und Facebook als Sharing-Optionen sehen ist, weil man in ihnen in den Einstellungen auf dem IPhone unterzeichnet werden müssen. Nicht die einzelnen Apps.

Hoffe, das hilft.

+0

Vielen Dank! Genau das, was ich brauchte! – tdh

+0

Markieren Sie meine Antwort als richtig, so wurde es beantwortet und bitte Upvote. – PoisonedApps

+0

Wie würde ich den Screenshot als Bild implementieren? Ich habe Ihre Methode verwendet, und es hat funktioniert, bis ich versucht habe, den Screenshot-Code zu implementieren. Der Screenshot würde leer angezeigt und Nachrichten wären immer noch keine Option. Vielen Dank! ; Ich schätze Ihre Antwort, aber ich habe Angst, dass ich nicht genug Ansehen habe, um sie zu verbessern. Ich werde es als korrekt markieren und ich werde sicherstellen, dass ich den Ruf aufbauen werde, um es zu verbessern. – tdh

0

Verwenden Sie einen SLComposeViewController.

import Social 

func shareButtonPress() { 

    var postPhrase = "New high score \(highscore)!" 

    //Generate the screenshot 
    UIGraphicsBeginImageContext(view.frame.size) 
    view.layer.renderInContext(UIGraphicsGetCurrentContext()) 
    var image = UIGraphicsGetImageFromCurrentImageContext() 
    UIGraphicsEndImageContext() 

    var postImage = UIImage(named: "\(image)") 

    let shareToFacebook = SLComposeViewController(forServiceType: SLServiceTypeFacebook) 
    shareToFacebook.setInitialText(postPhrase) 
    shareToFacebook.addImage(postImage) 
    presentViewController(shareToFacebook, animated: true, completion: nil) 
} 

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Reference/SLComposeViewController_Class/

+0

'ViewController.swift: 207: 36: Wert des optionalen Typs 'CGContext?' nicht ausgepackt; Wolltest du '!' oder '?'? 'Aber Build Fehler in der Zeile' view.layer.renderInContext (UIGraphicsGetCurrentContext()) ' – Gank