如何分离这些图像选择器功能?

时间:2017-07-07 00:40:44

标签: ios swift image swift3 uiimageview

我想将第三张甚至更多图像上传到图像视图,但我不知道如何分隔第三张图像。前两个工作正常,我如何添加第三个函数,我想在func图像选择器控制器上大多需要帮助。

var selected = 1


@IBAction func pickImage1(_ sender: Any) {


    let image = UIImagePickerController()
    image.delegate = self
    image.sourceType = UIImagePickerControllerSourceType.photoLibrary
    image.allowsEditing = false
    selected = 1

    self.present(image, animated: true)
}


func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        if selected == 1 {
            myImageView1.image = image
        } else {
            myImageView2.image = image
            return
        } 
       //i tried putting myImageView3 here but it just replaced the 2nd

    }
    else {
        //error
    }
    self.dismiss(animated: true, completion: nil)
}


@IBAction func pickImage2(_ sender: Any) {

       let image2 = UIImagePickerController()
    image2.delegate = self
    image2.sourceType = UIImagePickerControllerSourceType.photoLibrary
    image2.allowsEditing = false
    selected = 2

    self.present(image2, animated: true)
}


@IBAction func pickImage3(_ sender: Any) {
    let image3 = UIImagePickerController()
    image3.delegate = self
    image3.sourceType = UIImagePickerControllerSourceType.photoLibrary
    image3.allowsEditing = false
    selected = 3

    self.present(image3, animated: true)
}

2 个答案:

答案 0 :(得分:3)

首先,为每个图像视图添加唯一标记。避免使用0,因为默认标记为0.因此,您将拥有标记为1到3的图像视图。像这样设置每个图像视图

enter image description here

viewDidLoad上,为所有图片视图添加点击监听器。在所有三个图像视图上逐个调用此方法

let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:)))
imageView.isUserInteractionEnabled = true
imageView.tag = 1 
imageView.addGestureRecognizer(tapGestureRecognizer)

然后在图像点按处理程序中,通过记录其标签号来记录点击哪个图像视图。由于标签号是唯一的,我们可以使用它来确定稍后点击的图像视图

func imageTapped(tapGestureRecognizer: UITapGestureRecognizer)
{
    let image = UIImagePickerController()
    image.delegate = self
    image.sourceType = UIImagePickerControllerSourceType.photoLibrary
    image.allowsEditing = false
    let tappedImage = tapGestureRecognizer.view as! UIImageView
    selected = tappedImage.tag
    self.present(image, animated: true)
}

最后在图像选择委托中,从它的父视图中查找图像视图。假设您要将图像视图添加到self.view,只需以这种方式获取视图并设置图像

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        if let imageView = self.view.viewWithTag(selected) as? UIImageView {
            imageView.image = image
        }
    }
    else {
        //error
    }
    self.dismiss(animated: true, completion: nil)
}

答案 1 :(得分:2)

你有很多重复的代码。创建一个用于选择图片的功能。只需将每个按钮操作保存在选择图片后将设置的相应图像视图中。

这是更新后的代码:

var selectedImageView: UIImageView? = nil

@IBAction func pickImage1(_ sender: Any) {
    selectedImageView = myImageView1

    selectPicture()
}

@IBAction func pickImage2(_ sender: Any) {
    selectedImageView = myImageView2

    selectPicture()
}

@IBAction func pickImage3(_ sender: Any) {
    selectedImageView = myImageView3

    selectPicture()
}

func selectImage() {
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.sourceType = .photoLibrary
    picker.allowsEditing = false

    present(image, animated: true)
}

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        if let imageView = selectedImageView {
            imageView.image = image
        }
    }

    selectedImageView = nil

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

如果为每个按钮指定唯一标记,也可以使用单个按钮操作。假设你给3个按钮标记1,2和3.将3个pickImageX方法替换为1个:

@IBAction func pickImage(_ sender: UIButton) {
    switch sender.tag {
    case 1:
        selectedImageView = myImageView1
    case 2:
        selectedImageView = myImageView2
    case 3:
        selectedImageView = myImageView3
    default:
        break
    }

    if selectedImageView != nil {
        selectPicture()
    }
}

这假设您使用UIButton。否则需要调整。