我有1个UIImageView,用户可以点击UIImageView从照片库中选择照片,

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(cameraTapped(tapGestureRecognizer:)))           
cameraUIView.isUserInteractionEnabled = true
cameraUIView.addGestureRecognizer(tapGestureRecognizer)

cameraTapped在哪里

func cameraTapped(tapGestureRecognizer: UITapGestureRecognizer)
    {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        let actionSheet = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
        actionSheet.addAction(UIAlertAction(title: "写真を撮る", style: .default, handler: { (action:UIAlertAction) in
            if UIImagePickerController.isSourceTypeAvailable(.camera) {
                imagePicker.sourceType = .camera
                imagePicker.allowsEditing = true

                self.present(imagePicker,animated: true,completion: nil)
            }

        }))

        actionSheet.addAction(UIAlertAction(title: "アルバムから選択する", style: .default, handler: { (action:UIAlertAction) in
            if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
                imagePicker.sourceType = .photoLibrary
                self.present(imagePicker,animated: true,completion: nil)
            }

        }))


        actionSheet.addAction(UIAlertAction(title: "キャンセル", style: .cancel, handler: nil))

        self.present(actionSheet, animated: true, completion: nil)

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
            selectedImage = image
            cameraUIImageView.image = image
            cameraUIImageView.contentMode = .scaleAspectFill
            cameraUIImageView.clipsToBounds = true

            let leadingConstrain = NSLayoutConstraint(item: cameraUIImageView, attribute: .leading, relatedBy: .equal, toItem: cameraUIImageView.superview, attribute: .leading, multiplier: 1, constant: 0)
            leadingConstrain.isActive = true

            let trailingConstrain = NSLayoutConstraint(item: cameraUIImageView, attribute: .trailing, relatedBy: .equal, toItem: cameraUIImageView.superview, attribute: .trailing, multiplier: 1, constant: 0)
            trailingConstrain.isActive = true

            let topConstrain = NSLayoutConstraint(item: cameraUIImageView, attribute: .top, relatedBy: .equal, toItem: cameraUIImageView.superview, attribute: .top, multiplier: 1, constant: 0)
            topConstrain.isActive = true

            let bottomConstrain = NSLayoutConstraint(item: cameraUIImageView, attribute: .bottom, relatedBy: .equal, toItem: cameraUIImageView.superview, attribute: .bottom, multiplier: 1, constant: 0)
            bottomConstrain.isActive = true


        }
        dismiss(animated: true, completion: nil)
        cameraLabel.text = ""

    }

这可行。 但是,我想有3个UIImageView,点击每个UIImageView可以让用户选择照片并在UIImageVIew上显示该照片。

我需要创建3个不同的imagePickerController吗? 以及该怎么做?,因为imagePickerController实现了UIImagePickerDelegate。

在此处输入图片说明

#1楼 票数:1

您可以将所有UIImageView添加为主视图的子视图。 将UITapGestureRecognizer添加到主视图。 当用户点击主视图时,复制点击的图像视图的ID并使用它来显示图像。

var activeImageView:UIImageView? 

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(cameraTapped(tapGestureRecognizer:)))           
mainView.isUserInteractionEnabled = true // mainView is super view of all 3 imageViews.
mainView.addGestureRecognizer(tapGestureRecognizer)

您可以从hitTest:方法获取点击的imageView为

func cameraTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
  let view = tapGestureRecognizer.view
  let loc = tapGestureRecognizer.location(in: view)
  activeImageView = view?.hitTest(loc, with: nil) as? UIImageView
  //.... your code
}

并将图像设置为活动图像视图为

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
            selectedImage = image
            activeImageView.image = image
            //.... your code
        }
}

如果您有任何疑问,请让我知道,我将尽力提供帮助。

#2楼 票数:0

您只需要一个imagePickerController,如果使用collectionView,则应保存用户点击的indexPath,如果使用3 UIImageView,则应保存uiimageView的ID,并在用户选择后为其设置图像。

希望这对您有帮助

#3楼 票数:0 已采纳

ImagePickerController给您照片库中的image ,很好。 像这样: if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {

但是ImagePickerController不知道image在做什么。 您应该指定要显示image imageView

  1. 声明一个currentTappedImageView

var currentTappedImageView: UIImageView?

  1. 点击时保存imageView

currentTappedImageView = tapGestureRecognizer.view as? UIImageView

  1. 在currentTappedImageView上显示从ImagePickerController选择的图像

currentTappedImageView.image = selectedImage

#4楼 票数:0

您只需要一个UIImagePickerviewController实例。 但是您必须跟踪要填充的图像视图。

  ask by John translate from so

未解决问题?本站智能推荐:

2回复

点击UIImageView以显示按钮(拍摄照片/从相册中选择)

我有多个UIImageView 。 当用户点击这些UIImageView项时,我希望按钮向上滚动(拍摄图片,选择现有图片并取消)。 我该怎么做呢? 我不希望这些按钮一直显示。 仅当用户触摸或点击UIImageView时。 任何帮助是极大的赞赏。
1回复

如何仅使用一个UIImageView显示相册中的所有照片?

我知道这个: 现在,我想显示很多照片,即相册中的所有照片。 上面的代码无法正常工作。 如果幸运的话,它只会改变一次。 有办法吗?
2回复

如何使UIImageView在视觉上可点击和可选择

我正在尝试复制在网格视图中选择图像并单击后使其选择的体验。 我现在唯一能想到的方法是在UIImageView之上分层放置第二个视图,并在选择UIImageView后使其可见。 对于这个或一些好的例子,是否有更好的模式?
3回复

UIImageView将不会显示从UIImagePicker中选择的图像

我的imageView没有显示我使用UIImagePicker选择的图片。 这是所有代码: 有什么想法如何解决吗?
1回复

将图像(UIImageView)覆盖到照片中

拍照时是否可以整合UIImageView? 我似乎找不到讨论这个话题。 我想做的是在预览中叠加一个UIImageView。 轻按快门时,应该使用嵌入了UIImageView的图片进行拍摄。 所以这就是我现在的位置。 “测试图像”部分将变为可拖动到预览视图的顶部。 我
4回复

如何识别我点击了哪个UIImageview?

我想实现一种可通过触摸编辑的矩阵。 一系列黑色或白色单元格,如果轻按开关可形成黑色或相反。 为此,我将使用排列在堆栈视图中的UIImageView轻击手势识别器。 但是我怎么知道哪个UIImageView被点击了呢? 我可以通过哪种方式在UIImageView中更改UIImage?
1回复

如何显示照片库中刚选择的图像?

目标:用户从她的相册中选择照片>点击“完成”>显示照片。 问题: “完成”后,照片不会立即显示。 如果我再次打开选择器并点击“取消”,它们就会显示出来。 当我使用UIImagePickerController时,这种方法效果很好(照片立即显示出来),但是后来我切换到EL
1回复

如何在使用 UIImagePickerController 选择的 UIImageView 中显示图像?

我对 Xcode 和 Swift 非常陌生,我试图在使用UIImagePickerController选择的UIImageView中显示图像。 我使用@IBOutlet链接了UIImageView并在底部放置了一些if语句以允许编辑所选图片,但是当我的代码中出现错误时我被卡住了。 我很确定这个问题与