一个 UIImagePickerController 用于多个 ImageVIews

Posted

技术标签:

【中文标题】一个 UIImagePickerController 用于多个 ImageVIews【英文标题】:One UIImagePickerController for multiple ImageVIews 【发布时间】:2018-09-08 19:48:02 【问题描述】:

你能帮我处理 UIImagePickerController

我在 1 个 ViewController 中有 12 个 ImageView。我需要帮助,以便每个 ImageView 可以从库中选择不同的照片。有人告诉我为他们使用标签,但我无法让它工作,因为我是 Swift 的新手。

【问题讨论】:

显示你目前在做什么。说明您遇到了什么问题。 请参阅***.com/questions/44836842/… 以获得可能的解决方案。 @rmaddy 我目前正在这样做,用户将填写有关房屋的信息并拍摄房屋的门、窗、屋顶、楼梯的照片,并将所有这些信息推送到后端。所以我正在努力为所有不会将相同图像反映到所有 ImageVIews 的所有 imageViews 拍照 【参考方案1】:

为 Storyboard 上的每个 UIImageView 启用 User Interaction Enabled

TapGestureRecogniser 添加到每个UIImageView。将每个TapGestureRecogniserIBAction 连接起来。

@IBAction func tap(_ sender: UITapGestureRecognizer) 

    currentImageView = sender.view as! UIImageView

    let picker = UIImagePickerController()
    picker.delegate = self
    self.present(picker, animated: true, completion: nil)


定义变量来存储当前UIImageView

private var currentImageView: UIImageView? = nil

处理图像选择并将图像分配给currentImageView

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) 

    let image = info[UIImagePickerController.InfoKey.originalImage]
    currentImageView?.image = image as! UIImage

    self.dismiss(animated: true, completion: nil)

【讨论】:

【参考方案2】:

这与 swift 无关。您在 Interface builder 中(或在代码中设置了一个“标签”编号。UIResponder 后代上有一个 .tag 属性)。 之后,您在回调方法中进行切换,例如

为了更清楚一点:

let picker: UIImagePicker! =  
    // setup your image picker here, don't forget to set the proper delegate
()

var lastSender: AnyObject?
func onTouch(_ sender: AnyObject?) 
    // add checks for the sender here
    lastSender = sender
    present(picker, animated: true, completion: *Your Completion*)

代表:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any])

let image = *Get Image From Info* lastSender?.image = image

【讨论】:

我正在以编程方式创建所有内容。所以我不明白在将标签分配给 ImageViews 后如何设置 ImagePickerController。如果 let PickImage = info[UIImagePickerControllerOriginalImage] 有什么叫做?用户界面图像。我应该在这里写我应该选择哪个 Tagged imageView 吗? 您需要将调用者存储在某处,例如:var lastSender: AnyObject?,然后对其进行管理。 ImagePickerController(据我所知)是一个不同的 UIViewController,它不允许用户在选择图像时调用另一个 UIIImageView。因此,可以肯定地假设选择的图像是为发件人提供的。这是我想到的最快的选择。在图像选择器回调中,您只需将拾取的图像设置为lastSender.image。不过不要忘记为发件人类型添加检查。通过 IB 将不同的事物与您的操作联系起来很容易。 当您显示 UIImage 并分离逻辑时,需要使用标签来获取发送者的线索。如果您不需要分离某些内容,您可以简单地记住回调中的发件人并在用户完成时将图像设置为它 编辑了原始帖子以反映我在说什么

以上是关于一个 UIImagePickerController 用于多个 ImageVIews的主要内容,如果未能解决你的问题,请参考以下文章

相机相册

如何从 webview 使用 UIImagePickerController

iPhone OS 3.0 中的 UIImagePickerController

iOS开发——打开手机相册,获取图片

如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]

这是一个测试页面