2015-03-02 29 views
2

分享您的設備屏幕的問題表明,我正在尋找一種方式來共享使用UIActivityViewController當前設備屏幕。這是我的代碼到目前爲止。如UIActivityViewController

@IBAction func buttonShareTapped(sender: UIButton) { 
    let textToShare = "Here's my text to be shared!" 

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

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

    if let myWebsite = NSURL(string: "http://mywebsite.com/") 
    { 
     let objectsToShare = [textToShare, imageToShare, myWebsite] 
     let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil) 

     // Excluded Activities Code 
     activityViewController.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList] 

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

上面的代碼從開始讓objectsToShare行產生以下錯誤:

'_' is not convertible to 'UIImage?'

我相信這是因爲imageToShare正在返回nil。

在此先感謝。

編輯:在上面的例子中,圖像變量返回下面的值,但imageToShare返回零,所以我想問題是在那一行。

<UIImage: 0x7ffc85c12f80>, {320, 504}

+0

只要'+ named:'只返回一個_optional_'UIImage',你需要在你想使用它之前首先解包,也許......(source:https://developer.apple.com /library/ios/documentation/UIKit/Reference/UIImage_Class/index.html#//apple_ref/occ/clm/UIImage/imageNamed :) – holex 2015-03-02 14:44:17

回答

0

所以這很奇怪,但我並不需要將圖像轉換成命名的UIImage。我的代碼工作,當我做了以下預期:

if let imageToShare = image {...

然而零

if let image: UIImage = UIImage(named: "\(image)") {...

以下的回報,所以我猜是從UIGraphicsGetImageFromCurrentImageContext()返回不需要進一步的轉換。

1

也許是我的第一個評論可以幫助你了,但我會添加更多的說了一下。


如果你是確保圖像始終是一個有效的對象,它可以每次解開,你可以勇敢地使用:

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

該解決方案將導致直接墜毀如果imagenil並且您想展開它,那麼當您100%確定該圖像在運行時始終有效時,您可以這樣做只有;


否則就是正確的方法:

if let image: UIImage = UIImage(named: "\(image)") { 
    // you have the image unwrapped properly, it can be used for anything. 
    // ... 
} 

,如果image不能解開(= nil),你可以不添加到您的objectToShare陣列條件。


注:這就是爲什麼該變量的實際類型應明確每一個var imageToShare: UIImage? = UIImage(named: "\(image)")時,定義的,因爲你會假定它的價值一個不錯的例子是解開,但是它是隻有可選

+0

感謝您的反饋,您的建議使其更加強大,我很感激它。一個問題仍然是,imageToShare var返回零,你的更新不會再導致中斷,但是我希望能夠找出截屏所需的正確代碼。有任何想法嗎?謝謝! – 2015-03-02 16:00:55