ios - 一个 Controller 中的多个图像选择器

标签 ios swift

我正在为我的应用设计新手入门流程。我想让用户选择一个头像,在 ImageView 中显示该头像,然后选择背景照片并将其显示在另一个 ImageView 中。目前,我已经对所有内容进行了编码,但出于某种原因,当我展示选择器 Controller 时,它默认为化身 Controller 。我想让头像按钮只控制头像按钮背景图片,背景按钮只控制标题图片背景图片。这是我的代码:

 @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)  
}

最佳答案

委托(delegate)函数 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)

    }
}

关于ios - 一个 Controller 中的多个图像选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33622674/

相关文章:

Iphone 应用程序在 IOS 5.1 上运行良好,在 IOS 6 上运行不正常

ios - 无需点击通知即可在后台获取通知数据

ios - 使用 UIGraphicsImageRenderer 的 UIView 到 UIImage 错误地使用 alpha 渲染图像

ios - setNavigationBarHidden 无法以编程方式工作?

ios - 无限期地在后台传输心率?

ios - 如何在使用 CAShapeLayer - Swift 绘制的路径上标记点?

ios - 如何提高 swift 2.0 的性能?

ios - 在登录成功时执行 segue

ios - 有什么方法可以检查 iCloud 键值存储吗?

ios - iOS 应用程序中谷歌地图上的实时交通状况?