【问题标题】:Swift - get sender of UIImagePickerControllerSwift - 获取 UIImagePickerController 的发送者
【发布时间】:2020-10-26 00:32:08
【问题描述】:

我有 2 个 UIImageViews,我添加了一个 UITapGestureRecognizer 来打开用户的相机。一旦用户选择了一个图像,那么为了访问相机而被点击的 UIImageView 应该被设置为相机图像。

这是我的 openCamera 方法:

   @objc func openCamera(sender: ImagePlaceHolderView) {
       let picker = UIImagePickerController()
        picker.allowsEditing = true
        picker.delegate = self
        picker.sourceType = .camera 
        present(picker, animated: true)
    }

我的 UIImageViews 声明如下:

var left = UIImageView()
var right = UIImageView()
left = createImagePlaceholder()
right = createImagePlaceholder()

private func createImagePlaceholder() -> UIImageView {
    let placeholder = ImagePlaceHolderView(frame: CGRect(x: 0, y: 0, width: 90, height: 150))
    placeholder.isUserInteractionEnabled = true
    return placeholder
}

然后是我的委托方法:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    guard let image = info[.editedImage] as? UIImage else { return }
    left.image = image  // Here I want to set the sender's image to image
    dismiss(animated: true, completion: nil)
}

我正在努力弄清楚如何将 UIImageView 的图像设置为来自相机的这个新图像。我正在尝试将发件人传递给 openCamera 方法,但不确定如何提取它,因为发件人实际上似乎是 UITapGestureRecognizer 而不是被点击的图像。

【问题讨论】:

    标签: swift xcode uiimageview uiimagepickercontroller uitapgesturerecognizer


    【解决方案1】:

    您必须存储对sender 的引用并使用它在委托方法中设置图像。

    var imagePlaceholderView: ImagePlaceHolderView? // set the reference
    
    @objc func openCamera(sender: UITapGestureRecognizer) {
        imagePlaceholderView = sender.view as? ImagePlaceHolderView
        //...
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        guard let image = info[.editedImage] as? UIImage else { return }
        imagePlaceholderView?.image = image
        dismiss(animated: true, completion: nil)
    }
    

    【讨论】:

    • 感谢您的回复。我试过这个,但我得到线程 1:异常:“-[UITapGestureRecognizer setImage:]:无法识别的选择器发送到实例 0x10bd14560”,因为发送者似乎是手势而不是 imageView...
    • 在这种情况下,您必须修改 openCamera 方法。检查我的更新。
    • 太棒了,太完美了!很简单。非常感谢您的帮助
    • 不客气。如果有帮助,别忘了点赞。
    猜你喜欢
    • 2016-05-18
    • 2011-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多