Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';在Swift中从父视图控制器中删除后,我的视图是否会消失?_Swift_Uiview_Uiviewcontroller_Uiimagepickercontroller - Fatal编程技术网

为什么';在Swift中从父视图控制器中删除后,我的视图是否会消失?

为什么';在Swift中从父视图控制器中删除后,我的视图是否会消失?,swift,uiview,uiviewcontroller,uiimagepickercontroller,Swift,Uiview,Uiviewcontroller,Uiimagepickercontroller,我正在使用sprite工具包制作一个应用程序,所以我的场景/视图都是SKView选项。然而,我正在尝试允许用户上传/拍照,在这方面一切都很好。然而,在用户选择一张照片之后,我的图像视图控制器以某种方式再次设置动画,并且我之前所在的场景不再启用交互,因此它基本上是冻结的。我不明白为什么会这样。。。这就是我迄今为止所尝试的: 当提供选择照片的选项时,我所处的场景 func photoToController(sender: UIButton){ var button = sender

我正在使用sprite工具包制作一个应用程序,所以我的场景/视图都是SKView选项。然而,我正在尝试允许用户上传/拍照,在这方面一切都很好。然而,在用户选择一张照片之后,我的图像视图控制器以某种方式再次设置动画,并且我之前所在的场景不再启用交互,因此它基本上是冻结的。我不明白为什么会这样。。。这就是我迄今为止所尝试的:

当提供选择照片的选项时,我所处的场景

 func photoToController(sender: UIButton){ 
    var button = sender
    let controller = imageViewController()
    sender.superview?.removeFromSuperview()
    view?.addSubview(controller.view)
    controller.pickPhoto(sender: &image, button: &imageUploader,       buttonsender: &button)

}
允许用户处理照片库/相机的ViewController

 class imageViewController : UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

var image = UIImageView()
var Abutton = UIButton()
var takingPhoto = false

override func viewDidLoad() {
    print("imgviewloaded")
}
override func viewDidAppear(_ animated: Bool) {
    print("image view is animated")
}

func pickPhoto(sender: inout UIImageView, button: inout UIButton, buttonsender: inout UIButton) {
    let types = [UIImagePickerControllerSourceType.photoLibrary,UIImagePickerControllerSourceType.camera]
    if UIImagePickerController.isSourceTypeAvailable(types[buttonsender.tag]) {
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = types[buttonsender.tag]
        if buttonsender.tag == 1 {takingPhoto = true
        imagePicker.allowsEditing = false
        } else {
        imagePicker.allowsEditing = true
        }
        image = sender
        Abutton = button
        self.present(imagePicker, animated: true, completion: nil)
    }
}


func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    picker.dismiss(animated: true, completion: nil)
    self.removeFromParentViewController()
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
   image.image = info[UIImagePickerControllerOriginalImage] as? UIImage
    if takingPhoto{image.contentMode = .scaleToFill}
    if   image.image == info[UIImagePickerControllerOriginalImage] as?      UIImage{
    savedPhotos.saveNewPhoto(newPhoto : image.image!)
    }
    image.backgroundColor = UIColor.white
    Abutton.setTitle("", for: .normal)
    picker.dismiss(animated: true, completion: nil)
    self.removeFromParentViewController()

}





}

为什么每次单击按钮时都要实例化一个
imageViewController()
?这只是我想出的第一个有效的解决方案,我想我会马上删除它。我从来没有把视图控制器搞得一团糟,这不是一种正常的工作方式吗?这几乎肯定不是你想要的。那么我该怎么做呢,因为我认为我需要初始化控制器,以便访问照片/相机