【问题标题】:How to pass an UIImage from UIImagePickerController to another UIViewController?如何将 UIImage 从 UIImagePickerController 传递到另一个 UIViewController?
【发布时间】:2017-04-04 02:40:52
【问题描述】:

这几天我一直在尝试解决这个问题。我在 google 和 stack 中进行了大量搜索,但未能找到有效或有意义的东西。我是 Swift 新手,但有一些编程背景。

目前这部分应用程序拍摄一张照片,将其显示在当前视图控制器(VCPhoto)上,移动到另一个控制器,显示动画视图控制器(VCQScan),然后移动到结果视图控制器(VCResult)。我正在尝试将图像从 VCPhoto 移动到 VCResult。我找到的一个答案是这个

Passing Image to another View Controller (Swift)

在我的代码中,这会在下一个视图控制器中返回一个空值。

VCPhoto {

@IBOutlet var butTakePhoto: UIButton!
@IBOutlet var butSkip: UIButton!
@IBOutlet var scanCatB: UIButton!
@IBOutlet var previewPhoto: UIImageView!
let picker = UIImagePickerController()

override func viewDidLoad() {
    super.viewDidLoad()

    butTakePhoto.addTarget(self, action: #selector(VCPhoto.buttonPressed(_:)), for: .touchUpInside)
    butSkip.addTarget(self, action: #selector(VCPhoto.buttonPressed(_:)), for: .touchUpInside)
    scanCatB.addTarget(self, action: #selector(VCPhoto.buttonPressed(_:)), for: .touchUpInside)

    picker.delegate = self
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

public func buttonPressed (_ sender: AnyObject?){

    if sender === butTakePhoto {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
                picker.allowsEditing = false
                picker.sourceType = UIImagePickerControllerSourceType.camera
                picker.cameraCaptureMode = .photo
                picker.modalPresentationStyle = .fullScreen
            present(picker,animated: true,completion: nil)
        }
    }
    if sender === scanCatB {

        performSegue(withIdentifier: "sSegue", sender: UIButton.self)
    }
    if sender === butSkip {
        performSegue(withIdentifier: "Result", sender: nil)
    }

}
    func imagePickerController(
        _ picker:                           UIImagePickerController,
        didFinishPickingMediaWithInfo info: [String : Any])
    {
        picker.dismiss(animated: true, completion: nil)
        let image = info[UIImagePickerControllerOriginalImage] as? UIImage
        previewPhoto.image = image

        //butScan.isHidden=false
        //butSkip.isHidden=true
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    if segue.identifier == "sSegue" {
        let dvc = segue.destination as? VCQScan
        dvc?.newImage = previewPhoto.image
    }

VCScan {

@IBOutlet var catScanImage: UIImageView!
@IBOutlet weak var browsingImage: UIImageView!
var newImage: UIImage!


override func viewDidLoad() {
    super.viewDidLoad()

    browsingImage.image = newImage


    Timer.scheduledTimer(timeInterval: 4.0, target: self, selector: #selector(catScan), userInfo: nil, repeats: false)

    catScanImage.animationImages = [
    UIImage(named: "catPerc0.png")!,
    UIImage(named: "catPerc1.png")!,
    UIImage(named: "catPerc2.png")!,
    UIImage(named: "catPerc3.png")!,
    UIImage(named: "catPerc4.png")!
    ]

    catScanImage.animationDuration = 0.4
    catScanImage.startAnimating()
    // Do any additional setup after loading the view, typically from a nib.
}

func catScan() {
    self.performSegue(withIdentifier: "lastSegue", sender: self)
}
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    if segue.identifier == "lastSegue" {
        let dvc = segue.destination as! VCResult
        dvc.newImage = browsingImage.image
    }
}

}

上面的prepare for segue正在尝试将它移动到下一个VC,但它没有走那么远,它就出错了

    browsingImage.image = newImage

在 VCQScan 中,它似乎没有移动图像,即使我可以在 VCPhoto 的调试器中看到它...感谢您的帮助!!!!希望这是足够的信息,如果不让我知道!再说一次,我是 Swift 和 Xcode 的新手,所以我可能会错过一些非常愚蠢的东西......

调试器输出 2017-04-03 20:08:33.637110-0700 OatQuizApp [3314:1066322 [OatQuizApp.VCResult buttonPressed:]:无法识别的选择器发送到实例 0x100b1fdb0 2017-04-03 20:08:33.638569-0700 OatQuizApp[3314:1066322] * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[OatQuizApp.VCResult buttonPressed:]:无法识别的选择器发送到实例 0x100b1fdb0 ' * 首先抛出调用栈: (0x18ca7efd8 0x18b4e0538 0x18ca85ef4 0x18ca82f4c 0x18c97ed2c 0x192be30ec 0x192be306c 0x192bcd5e0 0x192be2950 0x192be246c 0x192bdd804 0x192bae418 0x1933a7f64 0x1933a26c0 0x1933a2aec 0x18ca2d424 0x18ca2cd94 0x18ca2a9a0 0x18c95ad94 0x18e3c4074 0x192c13130 0x1000cf900 0x18b96959c) libc++abi.dylib:以 NSException 类型的未捕获异常终止

【问题讨论】:

  • 请分享错误描述。
  • 添加错误!

标签: ios xcode swift3


【解决方案1】:

我发现了问题.. 一切都正确编码,至少最初是这样。我没有注意 UIImageView,我在 VCQScan 上没有,只是添加了一个插座,这就是它出现为空的原因。出于某种原因,我认为 UIImageView 只是承载图像......我想我盯着它太久了。感谢收看!

【讨论】:

    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    相关资源
    最近更新 更多