1

つまり、ビュー階層に追加されたばかりの childVC からのビューを提示していますが、ウィンドウ階層にはまだ追加されていないようです。

このプロジェクトを開始し、ページベースのプロジェクトとして設定しました。UIPageViewController同梱物に追加されたのボイラーは次のRootViewControllerとおりです。

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    // Configure the page view controller and add it as a child view controller.
    self.pageViewController = UIPageViewController(transitionStyle: .Scroll, navigationOrientation: .Horizontal, options: nil)
    self.pageViewController!.delegate = self

    let startingViewController: CameraViewController = self.modelController.viewControllerAtIndex(0, storyboard: self.storyboard!)!
    let viewControllers = [startingViewController]
    self.pageViewController!.setViewControllers(viewControllers, direction: .Forward, animated: false, completion: {done in })

    self.pageViewController!.dataSource = self.modelController

    self.addChildViewController(self.pageViewController!)
    self.view.addSubview(self.pageViewController!.view) // !! -- viewDidAppear for CameraViewController called here

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
    var pageViewRect = self.view.bounds
    if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
        pageViewRect = CGRectInset(pageViewRect, 40.0, 40.0)
    }
    self.pageViewController!.view.frame = pageViewRect

    self.pageViewController!.didMoveToParentViewController(self)

    // Add the page view controller's gesture recognizers to the book view controller's view so that the gestures are started more easily.
    self.view.gestureRecognizers = self.pageViewController!.gestureRecognizers
}

私が変更した唯一の行は、自分の VC をstartingViewController次のように設定することでした。

 let startingViewController: CameraViewController = self.modelController.viewControllerAtIndex(0, storyboard: self.storyboard!)!

最初の画面をカメラ、つまり ImagePickerVC にしようとしています。これが私のコードです。ご覧のとおり、プレビューを表示するUIImageViewためにこれに a を追加していますが、最初にonを表示しようとしています:CamerViewControllerUIImagePickerControllerviewDidAppear

import UIKit

class CameraViewController: UIViewController, UINavigationControllerDelegate, UIImagePickerControllerDelegate {
    @IBOutlet var imageView: UIImageView!

    @IBAction func didTapCameraButton(sender: AnyObject) {
        presentImagePicker();

    }

    var dataObject: AnyObject?

    var imagePicker: UIImagePickerController!  

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.        
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated);

        presentImagePicker();
    }


    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func presentImagePicker() {
        imagePicker =  UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = .Camera

        presentViewController(imagePicker, animated: false, completion: { () -> Void in

            println("save bolean")
        })
    }


    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
        imagePicker.dismissViewControllerAnimated(true, completion: nil)
        imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
    }



}

ただし、警告imagePickerが表示され、表示されません。

Warning: Attempt to present <UIImagePickerController: 0x14e833a00> on <Here.CameraViewController: 0x14e614af0> whose view is not in the window hierarchy!

ブレークポイントを設定したところ、 をに追加すると、この行で が呼び出されるviewDidAppearことがわかりました。CameraViewControllerPageViewControllerRootViewController

 self.view.addSubview(self.pageViewController!.view) // !! -- viewDidAppear for CameraViewController called here

これは当然のことのようですが、なぜエラーが発生するのでしょうか? ビューが追加されたばかりなので、RootViewController のビュー階層にあります。


UIImagePickerControllerから手動で表示するボタンも追加しましたCameraViewController。これで問題なく表示されます。

4

0 に答える 0