2015-01-13 15 views
7

Sto sviluppando una parte di un'app in modo tale che quando si tocca il pulsante di condivisione, consente di condividere istantaneamente uno screenshot del proprio record con un messaggio. Non sono stato in grado di produrre/condividere uno screenshot e quando tocco il pulsante di condivisione, l'app mi consente solo di copiare il mio testo predefinito o "Mail" come testo predefinito, non permettendomi di pubblicare su Facebook, Twitter, Messaggi e altro ancora.Condivisione di uno screenshot in Activity View Controller - 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) 

} 

Qual è il modo migliore di fare questo? Grazie!

risposta

10

Questo è come gestire la condivisione nella mia app.

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) 
} 

Ho escluso un numero di opzioni di condivisione utilizzando .excludedActvityTypes.

Poi ogni volta che si preme il pulsante di condivisione ce l'ha chiamata questa

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

La ragione per cui non si è visto Twitter e Facebook come opzioni di condivisione è perché è necessario essere firmato in loro all'interno delle impostazioni su iPhone. Non le singole app.

Spero che questo aiuti.

+0

Grazie mille! Proprio quello di cui avevo bisogno! – tdh

+0

Contrassegna la mia risposta come corretta in modo che sia stata data una risposta e upvote per favore. – PoisonedApps

+0

Come posso implementare lo screenshot come immagine? Ho usato il tuo metodo, e ha funzionato, fino a quando non ho provato a implementare il codice dello screenshot. Lo screenshot risulterebbe vuoto e i messaggi non sarebbero comunque un'opzione. Grazie! ; Apprezzo la tua risposta, ma temo di non avere abbastanza reputazione per svalutarla. Lo segnerò correttamente e farò in modo di costruire la reputazione per svenderlo. – tdh

0

Utilizzare un 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: Valore del tipo facoltativo 'CGContext?' non scartato; intendevi usare '!' o '?'? 'Ma genera errore sulla riga' view.layer.renderInContext (UIGraphicsGetCurrentContext()) ' – Gank