【问题标题】:Sharing image using UIActivityViewController使用 UIActivityViewController 共享图像
【发布时间】:2015-08-12 02:35:00
【问题描述】:

使用UIActivityViewController分享来自UIImageView的图片?

我正在尝试使用 UIActivityViewController 共享图像,但出现错误:

func shareIMG(){
    let activityItems = [self.imageView.image]
    let avc = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)

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

错误信息:

找不到“UIActivityViewController”类型的初始化程序 接受类型为 '(activityItems: [UIImage?], 应用活动:无)'

有什么想法吗?

【问题讨论】:

    标签: ios swift uiactivityviewcontroller


    【解决方案1】:
    let activityItem: [AnyObject] = [self.imageView.image as! AnyObject]
    
    let avc = UIActivityViewController(activityItems: activityItem as [AnyObject], applicationActivities: nil)
    
    self.presentViewController(avc, animated: true, completion: nil)
    

    注意:以上代码在Xcode 6.3模拟器中测试

    【讨论】:

    • @Mariah 现在我的 xcode8 不能使用 swift。让我尽快检查并更新您。
    • @Mariah 有什么问题?
    • 没问题了!
    • 它不工作 xcode 8 我也很厌倦。还有其他解决方案吗?
    • 发生崩溃 MFMailComposeInternalViewController addAttachmentData:mimeType:fileName:] 附件不能为 nil。'
    【解决方案2】:

    只需创建一个按钮,它的动作。并像这样安装按钮的动作。

    注意:您必须通过设置登录您的 facebook 或 twitter。然后这样做。

    @IBAction func onShareTouched(sender: AnyObject) {
    
        print("share")
    
        let myShare = "My beautiful photo! <3 <3"
        let image: UIImage = UIImage(named: "yourImageNameHere")
    
        let shareVC: UIActivityViewController = UIActivityViewController(activityItems: [(image), myShare], applicationActivities: nil)
        self.presentViewController(shareVC, animated: true, completion: nil)
    
    }
    

    【讨论】:

    • 谢谢。这对我有帮助。因为仅仅传递一个 Image("yourImage") 是行不通的。您必须先使用 UIImage("yourImage") 将其转换为 UIImage。值得注意。
    【解决方案3】:

    使用 Swift 5

       let img  = imageView.image!.pngData()
       let messageStr:String  = "some sharing text"
       let shareItems:Array = [img!, messageStr] as [Any]
    
       let activityViewController = UIActivityViewController(activityItems: shareItems, applicationActivities: nil)
        activityViewController.excludedActivityTypes = [UIActivity.ActivityType.print, UIActivity.ActivityType.postToWeibo, UIActivity.ActivityType.copyToPasteboard, UIActivity.ActivityType.addToReadingList, UIActivity.ActivityType.postToVimeo]
    
        if UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiom.phone {
            self.present(activityViewController, animated: true, completion: nil)
            } else {
                let popup: UIPopoverController = UIPopoverController(contentViewController: activityViewController)
                popup.present(from: sender.bounds, in: sender, permittedArrowDirections: UIPopoverArrowDirection.any, animated: true)
            }
    

    【讨论】:

      【解决方案4】:

      使用 Swift 5

      注意:将图像共享为数据时

      func shareApplication() {
          
          let description = "Hi, I have shared my profile"
          
          let url = URL(string: "https://cdn.vox-cdn.com/thumbor/9iH_CxCOzkVQACme6xpCkgzydzo=/0x0:1323x638/920x613/filters:focal(539x248:749x458):format(webp)/cdn.vox-cdn.com/uploads/chorus_image/image/69851120/Screenshot_2021_09_10_7.38.39_AM.0.png")
          
          if let imageData = NSData(contentsOf: url!) {
              
              // MARK: - URL to Data
      
              let image = UIImage(data: imageData as Data)
              
              let activityVC = UIActivityViewController(activityItems: [description, image ?? UIImage()], applicationActivities: nil)
              self.present(activityVC, animated: true, completion: nil)
          }
      }
      

      【讨论】:

        【解决方案5】:

        看来您需要用 ! 解开 activityItems 的包装

        【讨论】:

        • 你能详细说明a吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-21
        • 1970-01-01
        • 2016-06-04
        相关资源
        最近更新 更多