【问题标题】:Passing Uiimages to view controller将 Uiimage 传递给视图控制器
【发布时间】:2017-08-08 21:12:54
【问题描述】:

所以我有一个名为 Paparazzo 的自定义相机,从相机拍摄的图像存储在一个名为 ImageSource 的自定义数组中。现在我宣布我会将 ImageSource 从相机视图控制器传递到我的第二个视图控制器,但是我意识到我的图像在第二个视图控制器上出现的位置为零。如何通过 segue 传递声明为 ImageSource 的 Photos 中的所有图像。那是我的问题。这是我的代码。

private var photos = [ImageSource]()

@IBAction private func showMediaPicker() {
    var theme = PaparazzoUITheme()
    theme.shutterButtonColor = UIColor.blue.cgColor
    let assemblyFactory = Paparazzo.AssemblyFactory(theme: theme)
    let assembly = assemblyFactory.mediaPickerAssembly()
    let mediaPickerController = assembly.module(
        items: [],
        selectedItem: nil,
        maxItemsCount: 20,
        cropEnabled: true,
        cropCanvasSize: CGSize(width: 1280, height: 960),
        configuration: { [weak self] module in
            weak var module = module

            module?.setContinueButtonTitle("Done")

            module?.onFinish = { mediaPickerItems in
                // storing picked photos in instance var and updating UI
                self?.photos = mediaPickerItems.map { $0.image }
                self?.updateUI()
                self?.performSegue(withIdentifier: "ShowNow", sender: self?.photos)
            }
            module?.onCancel = {
                module?.dismissModule()
            }
        }
    )

    navigationController?.pushViewController(mediaPickerController, animated: true)
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "ShowNow") {
        if let pivc: view2ViewController? = segue.destination as? view2ViewController,
            let images = sender as? [UIImage] {
            pivc?.image2 = images
        }
    }
}

【问题讨论】:

  • 替换让图片=发件人为? [UIImage] { pivc?.image2 = images } by pivc?.image2 = 照片

标签: ios iphone swift xcode swift3


【解决方案1】:

您可以简单地通过 UIImage 通过将图像保存在 [NSUserDefault standardUserDefault] setobject:image valueforkey:@"img" ] 并通过 [NSUserDefault standardUserDefault] valueforkey:@"img" ] 获取它,或者您可以通过将其设为全局UIImage 的变量并传递给另一个视图控制器。

使用此代码为 PNG 保存图像:

[[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"img"];

使用此代码保存图像对于 JPEG:

[[NSUserDefaults standardUserDefaults] UIImageJPEGRepresentation(image) forKey:@"img"];

并使用此代码将其取回

NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"img"]; UIImage* image = [UIImage imageWithData:imageData];

【讨论】:

  • 你能给我举个例子吗?我没听你说的。
  • 使用此代码保存图像 [[NSUserDefaults standardUserDefaults] setObject:UIImagePNGRepresentation(image) forKey:@"img"];并使用此代码取回它 NSData* imageData = [[NSUserDefaults standardUserDefaults] objectForKey:@"img"]; UIImage* image = [UIImage imageWithData:imageData];
  • 能不能把它写成代码形式让我看清楚
  • 谢谢你,我会试一试,让你知道它是怎么回事
  • 我知道我现在在上班,12:30 会回家。所以我会检查,如果它是正确的,我会标记它
【解决方案2】:

您的第一个 ViewController 有一个内部带有 ImageSource 的数组。 您的目标 ViewController 应该有类似的数组(例如:var passedPhotos: [ImageSource]?)。

您在第一个 VC 中的 prepare(for segue: UIStoryboardSegue, sender: Any) 方法应如下所示:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if (segue.identifier == "YourSegueIdentifier") {
        if let secondVC: YourSecondViewController? = segue.destination as? YourSecondViewController,
            if let photosToPass = photos {
                secondVC?.passedPhotos = photosToPass 
            }
        }
    }
}

【讨论】:

    【解决方案3】:

    首先在secondVC中创建一个数组

     var arrImages =  Array()
    

    然后在你的 currentVC 中做这些事情

        override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
            if (segue.identifier == "ShowNow") {
                 let pivc: view2ViewController? = segue.destination as? view2ViewController
    
                    pivc?.arrImages = images
    // here images is the array of images
    
            }
        }
    

    【讨论】:

    • 照片怎么样。我正在从图像源访问图像。从相机拍摄的所有图像都会自动存储在 imagesource 中
    • 您说您将图像存储在自定义数组 ImageSource 中。因此您可以从那里获取它,然后可以传递给下一个 VC。
    • 我收到此错误“无法将 'ImageSource.PHAssetImageSource' (0x10c3d87c8) 类型的值转换为 'UIImage' (0x10e8100b0)。”
    • 我在此处以“LIHSlider(images: arrImages as![UIImage])”的形式访问了 arrImages 中的图像
    猜你喜欢
    • 2012-05-02
    • 2012-11-13
    • 1970-01-01
    • 2011-08-07
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    相关资源
    最近更新 更多