我想将第三张甚至更多图像上传到图像视图,但我不知道如何分隔第三张图像。前两个工作正常,我如何添加第三个函数,我想在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)
}
答案 0 :(得分:3)
首先,为每个图像视图添加唯一标记。避免使用0,因为默认标记为0.因此,您将拥有标记为1到3的图像视图。像这样设置每个图像视图
在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
。否则需要调整。