【问题标题】:Programmatically send image to new view controller when button is clicked单击按钮时以编程方式将图像发送到新的视图控制器
【发布时间】:2018-04-10 22:08:49
【问题描述】:

我正在尝试制作一个在“WebController”中加载 UIWebView 的应用程序,UIWebView 下方是一个按钮,用于截取 UIWebView 的屏幕截图并将其保存到我的 PhotoLibrary。我想将单击按钮时刚刚拍摄的照片发送到新控制器“ViewImageController”,并插入到 ViewImageController 中的 UIImageView 中以编辑或执行其他操作。我试图在我的 WebController 中使用 segue 将图像发送到我的 ViewImageController。我看过很多关于在视图控制器之间传递图像的文章,但我只发现它们处理我没有使用的 UIImagePickerController 委托,因为我试图发送一张刚刚拍摄的照片而不是拍摄照片,然后选择该图像从 ImagePicker 发送。如果不清楚,请告诉我,以便我尝试更好地解释。

WebController.swift

var sendImage:UIImage!
....
....
....
@IBAction func takePhotoBtn(_ sender: UIButton) {
    print("Screenshot")
    // = UIImage
    UIGraphicsBeginImageContext(webPageView.frame.size)
    if let aContext = UIGraphicsGetCurrentContext(){
        webPageView.layer.render(in: aContext)
    }
    var viewImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    UIImageWriteToSavedPhotosAlbum(viewImage!, nil, nil, nil)
    viewImage = sendImage
    self.performSegue(withIdentifier: "viewLargePhoto", sender: AnyObject.self)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let viewImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    if segue.identifier == "viewLargePhoto" {
        var viewPhotoController = segue.destination as! ViewPhotoController
        //Line beneath is the trouble causer
        viewPhotoController.imageView = sendImage//Cannot assign value of type 'UIImage!' to type 'UIImageView!'
    }
}

ViewPhotoController.swift

@IBOutlet weak var imageView: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewWillAppear(_ animated: Bool) {
    self.navigationController?.hidesBarsOnTap = true
    self.displayPhoto()
}
....
....
....
func displayPhoto(){
    let screenSize: CGSize = UIScreen.main.bounds.size
    let targetSize = CGSize(width: screenSize.width, height: screenSize.height)

    let imageManager = PHImageManager.default()
    imageManager.requestImage(for: self.photoAsset[self.index] as! PHAsset, targetSize: targetSize, contentMode: .aspectFit, options: nil, resultHandler: {(result,info)->Void in
        self.imageView.image = result
    })
}

【问题讨论】:

    标签: swift uiimageview uiimage uistoryboardsegue uigraphicscontext


    【解决方案1】:

    在您的 ViewPhotoController.swift 中创建 var imageFromWebController: UIImage?

    然后从 WebController.swift 传递你的图像 像下面的代码

    if segue.identifier == "viewLargePhoto" {
            var viewPhotoController = segue.destination as! ViewPhotoController
            //Line beneath is the trouble causer
            viewPhotoController.imageFromWebController = sendImage
        }
    

    将该图像分配给 ViewPhotoController 中的 imageView

    override func viewDidLoad() {
            super.viewDidLoad()
            imageView.image = imageFromWebController
        }
    

    【讨论】:

    • 感谢您提供解决方案。不幸的是,它没有将图像传递给 ViewPhotoController。我知道该按钮正在执行一些操作,因为它需要一个屏幕截图图像,因为如果我查看 PhotoLibrary,我可以看到该图像,并且它与 ViewPhotoController 相连接。当我使用 ViewPhotoController 时,UIImageView 是空的。
    • 这是我收到的错误:HuntingLicense[69913:3549111] > 的窗口不等于 的视图窗口!
    • @Duncan 检查您是否使用了 2 个 segue,您可以使用一个或可能这将是一个自动布局错误转到情节提要并解决约束错误
    • 我的按钮函数中确实有一行额外的代码调用另一个 segue。我把它拿出来并没有收到任何错误,但我仍然在同一条船上看到没有图像的新视图控制器。单击按钮时,我仍然可以看到我的手机正在捕获图像,但我无法弄清楚如何在按钮所指向的视图控制器中显示该图片。
    猜你喜欢
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2020-07-01
    • 2018-07-12
    相关资源
    最近更新 更多