[如何在两个UIImageViews上显示两个图像,一个是ViewController,一个是UIImagePickerController? [重复]

问题描述 投票:0回答:1

当我点击两个不同的UIImageViews并选择后,将它们显示在两个不同的UIImageView上,我想从手机库中选择图像,但是我在运行以下代码时,同一张图片显示在两个不同的UIImageViews上,如何解决?'''

extension SettingProfileViewController:UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
           profilePhoto.image = image
            print("profile")
        }

        if let wallImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            wallpaperPhoto.image = wallImage
            print("wallpaper")
        }


        dismiss(animated: true, completion: nil)

    }

}
override func viewDidLoad() {
        super.viewDidLoad()
     let tapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingProfileViewController.handleSelectProfilePhotoView))
        profilePhoto.addGestureRecognizer(tapGesture)
        profilePhoto.isUserInteractionEnabled = true

     let wallTapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingProfileViewController.handleSelectWallpaperImageView))
        wallpaperPhoto.addGestureRecognizer(wallTapGesture)
        wallpaperPhoto.isUserInteractionEnabled = true
}

 @objc func handleSelectProfilePhotoView(){
        let pickerController = UIImagePickerController() //открывает галерею
        pickerController.delegate = self
        present(pickerController, animated: true, completion: nil)
    }


    @objc func handleSelectWallpaperImageView(){
        let pickerCont = UIImagePickerController()
        pickerCont.delegate = self
        present(pickerCont, animated: true, completion: nil)
    }

'''
ios swift uiimagepickercontroller
1个回答
0
投票

您观察到的是,当用户点击任意图像视图(wallpaperPhotoprofilePhoto)时,UIImagePickerController始终使用self作为其委托。然后,当用户选择图像时,委托者无法再区分最初点击的图像视图。

您可以简单地添加一个弱的可选变量,以指示点击的“活动”图像视图,然后仅设置其图像。另外,您还可以使用sender参数将点击处理程序简化为单个函数,该参数是用户点击的图像视图,并将activeImageView设置为此。

extension SettingProfileViewController:UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    weak var activeImageView:UIImageView? = nil

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
           activeImageView.image = image
        }
        dismiss(animated: true, completion: nil)
    }


    override func viewDidLoad() {
         super.viewDidLoad()
        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingProfileViewController.handleSelect(_:))
            profilePhoto.addGestureRecognizer(tapGesture)
            profilePhoto.isUserInteractionEnabled = true

         let wallTapGesture = UITapGestureRecognizer(target: self, action: #selector(SettingProfileViewController.handleSelect(_:)))
            wallpaperPhoto.addGestureRecognizer(wallTapGesture)
            wallpaperPhoto.isUserInteractionEnabled = true
    }

    @objc func handleSelect(sender:UIGestureRecognizer) {
        guard let sendingImageView = sender.view as? UIImageView else {
            print("Ooops, received this gesture not from an ImageView")
            return
        }
        activeImageView = sendingImageView
        let pickerController = UIImagePickerController() //открывает галерею
        pickerController.delegate = self
        present(pickerController, animated: true, completion: nil)
    }

// ...
© www.soinside.com 2019 - 2024. All rights reserved.