将uiivew转换为图像

时间:2017-09-08 01:54:44

标签: ios swift xcode

你好我们试图将Objective-c代码转换为swift我做了但我得到了错误 这是我的代码

 func imageWithView(view: UIView) -> UIImage {
    UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
    view.drawHierarchy(in: view.bounds, afterScreenUpdates: true)
    let img = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return img!

}

@IBAction func uploadbutton(_ sender: Any)
{
    let viewcontroller = newViewController()

    viewcontroller.self.storyboard?.instantiateViewController(withIdentifier: "newViewController")
    viewcontroller.uiimageview = self.imageWithView(view: view1)
    self.present(viewcontroller, animated: true, completion: nil)


}

我在代码中遇到错误:无法将类型'UIImage'的值分配给UIImageView类型

viewcontroller.uiimageview = self.imageWithView(view: view1)

3 个答案:

答案 0 :(得分:1)

尝试viewcontroller.uiimageview.image = self.imageWithView(view: view1)

图像视图只是一个包含图像属性的视图容器

答案 1 :(得分:0)

imageWithView(view:)的结果是UIImage,但您将其分配给UIImageView对象。

viewcontroller.uiimageview.image = self.imageWithView(view: view1)

答案 2 :(得分:0)

我强烈建议您修改问题。听起来(从您的评论中)您希望:

  • 选择UIView并创建UIImage
  • 选择UIImage并在UIActivityViewController
  • 中使用它

你不需要做更多的事情!假设你已经UIViewController显示(1)您要上传的视图,包括它的子视图,以及(2)有一个按钮来显示要分享的选项。以下是如何完成这两个

  • 这是一个扩展视图(及其子视图)并返回UIImage

    extension UIView {
        public func createImage() -> UIImage {
            UIGraphicsBeginImageContextWithOptions(
                CGSize(width: self.frame.width, height: self.frame.height), true, 1)
            self.layer.render(in: UIGraphicsGetCurrentContext()!)
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image!
        }
    }
    
  • 现在你有一个UIImage,只需出示一个UIActivityViewController

    @IBAction func shareImage(_ sender: UIBarButtonItem) {
        var shareImage = myView.createUIImage()
        let vc = UIActivityViewController(activityItems: [shareImage], applicationActivities: [])
        vc.excludedActivityTypes =  [
            //UIActivityTypePostToTwitter,
            //UIActivityTypePostToFacebook,
            UIActivityType.postToWeibo,
            //UIActivityTypeMessage,
            //UIActivityTypeMail,
            UIActivityType.print,
            //UIActivityTypeCopyToPasteboard,
            UIActivityType.assignToContact,
            //UIActivityTypeSaveToCameraRoll,
            UIActivityType.addToReadingList,
            //UIActivityTypePostToFlickr,
            UIActivityType.postToVimeo,
            UIActivityType.postToTencentWeibo
        ]
        present(vc,
                animated: true,
                completion: nil)
        vc.popoverPresentationController?.sourceView = self.view
        vc.completionWithItemsHandler = {(activity, success, items,  error) in
        }
    }
    

我通常会将所有排除在外的UIActivityTypes(甚至是我评论出来的那些)包含在内,以提醒我那些我所包含的内容。