Swift 与UIActivityViewController共享设备屏幕

Swift 与UIActivityViewController共享设备屏幕,swift,uiactivityviewcontroller,Swift,Uiactivityviewcontroller,正如问题所示,我正在寻找一种在使用UIActivityViewController时共享当前设备屏幕的方法。这是到目前为止我的代码 @IBAction func buttonShareTapped(sender: UIButton) { let textToShare = "Here's my text to be shared!" // Generate the screenshot UIGraphicsBeginImageContext(view.frame.siz

正如问题所示,我正在寻找一种在使用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)
    }
}
上面的代码从Let objectsToShare开头的行生成以下错误:

“UIImage”不能转换为“UIImage”

我相信这是因为imageToShare目前返回零

提前谢谢

编辑:在上面的示例中,image变量返回下面的值,但是imageToShare返回nil,所以我猜问题就在这一行


,{320504}

也许我的第一条评论已经对你有所帮助了,但我想补充一点


如果您确信图像始终是有效对象,并且每次都可以展开,那么您可以勇敢地使用它:

var image: UIImage = UIImage(named: "\(image)")!
如果
图像
nil
且您希望将其展开,则此解决方案将导致直接崩溃,因此只有当您100%确定图像在运行时始终有效时,才能执行此操作


否则,这是正确的方法:

if let image: UIImage = UIImage(named: "\(image)") {
    // you have the image unwrapped properly, it can be used for anything.
    // ...
}
如果
图像
无法展开(
nil
),则无法有条件地向
对象添加share
数组



注意:这是一个很好的例子,为什么每次都应该显式定义变量的实际类型(
var-imageToShare:UIImage?=UIImage(名为:“\(image)”
),因为您假定它的值是展开的,但它只是可选的。

所以这很奇怪,但我不需要将图像转换为命名的UIImage。当我执行以下操作时,我的代码按预期工作:

如果让imageToShare=image{…

然而,以下结果为零

如果让image:UIImage=UIImage(名为:“\(image)”){…


因此,我猜从UIGraphicsGetImageFromCurrentImageContext()返回的内容不需要进一步转换。

只要名为:的
+只返回可选的
UIImage
,您需要在使用它之前先将其展开,可能……(来源:)感谢您的反馈,您的建议使它更加健壮,我对此表示感谢。但仍然存在的一个问题是imageToShare var返回零,随着您的更新,它将不再导致中断,但是我希望能够找出截图所需的正确代码。有什么想法吗?谢谢!