【问题标题】:Share your device screen with UIActivityViewController与 UIActivityViewController 共享您的设备屏幕
【发布时间】:2015-03-02 14:21:55
【问题描述】:

正如问题所暗示的,我正在寻找一种在使用 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 开始的行产生以下错误:

'_' is not convertible to 'UIImage?'

我认为这是因为 imageToShare 目前返回 nil。

提前致谢。

edit:在上面的示例中,图像变量返回下面的值,但 imageToShare 返回 nil,所以我猜问题出在那一行。

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

【问题讨论】:

标签: swift uiactivityviewcontroller


【解决方案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)"),因为你假设它的值是 em> 展开,然而它是一个可选的而已。

【讨论】:

  • 感谢您的反馈,您的建议使它更加强大,我很感激。一个问题仍然存在,imageToShare var 返回 nil,随着您的更新,它将不再导致中断,但是我希望能够找出截取屏幕截图所需的正确代码。有任何想法吗?谢谢!
【解决方案2】:

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

if let imageToShare = image {...

但以下返回 nil

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

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

【讨论】:

    猜你喜欢
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多