一个 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
。将每个TapGestureRecogniser
与IBAction
连接起来。
@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