一个控制器中的多个图像选择器

时间:2015-11-10 04:04:37

标签: ios swift

我正在处理我的应用的入门流程。我想要允许用户选择头像,在图像视图中显示该头像,然后选择背景照片并在另一个图像视图中显示。目前,我已将所有内容编码,但出于某种原因,当我呈现选择器控制器时,它默认为头像的控制器。我希望化身按钮仅控制化身按钮背景图像和背景按钮以仅控制标题图像背景图像。这是我的代码:

 @IBAction func getBackground(sender: AnyObject) {
    let backgroundPickerController = UIImagePickerController()
    backgroundPickerController.delegate = self
    backgroundPickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    backgroundPickerController.allowsEditing = true
    self.presentViewController(backgroundPickerController, animated: true, completion: nil)
}

@IBAction func selectAvatar(sender: AnyObject) {
    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    imagePickerController.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
    imagePickerController.allowsEditing = true
    self.presentViewController(imagePickerController, animated: true, completion: nil)
}

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    // set image for button
    let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    self.addAvatar.setImage(image, forState: .Normal)

    // Dismiss controller
    self.dismissViewControllerAnimated(false, completion: nil)
}

func backgroundPickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
  // set image for button
    let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    self.headerImage.image = image
     self.dismissViewControllerAnimated(false, completion: nil)  
}

1 个答案:

答案 0 :(得分:4)

委托函数imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?)也会返回完成图片处理的UIImagePickerController

因此,您可以使用if语句检查已完成的选择器是pickerOne还是pickerTwo。然后根据结果实现不同的行为。

在他们完成清理一些记忆后,可能会将拣货员设置为nil

class multiPickerVC : UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {


    var pickerOne : UIImagePickerController?
    var pickerTwo : UIImagePickerController?


    override func viewDidLoad() {
        //
    }


    @IBAction func getBackground(sender: AnyObject) {
        pickerTwo = UIImagePickerController()
        pickerTwo!.delegate = self
        pickerTwo!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        pickerTwo!.allowsEditing = true
        self.presentViewController(pickerTwo!, animated: true, completion: nil)
    }

    @IBAction func selectAvatar(sender: AnyObject) {
        pickerOne = UIImagePickerController()
        pickerOne!.delegate = self
        pickerOne!.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        pickerOne!.allowsEditing = true
        self.presentViewController(pickerOne!, animated: true, completion: nil)
    }


    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage, editingInfo: [String : AnyObject]?) {

        if picker == pickerOne {

            // set image for button
            let image = info[UIImagePickerControllerOriginalImage] as? UIImage
            self.addAvatar.setImage(image, forState: .Normal)

        } else if picker == pickerTwo {

            // set image for button
            let image = info[UIImagePickerControllerOriginalImage] as? UIImage

            self.headerImage.image = image
        }

        self.dismissViewControllerAnimated(true, completion: nil)

    }
}