2015-03-02 26 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