

アプリで遊んでいる姿をインカメを利用してカメラやビデオで撮影する事が出来ないか試しています。

カメラをUIImagePickerで設定すると、カメラ起動で必ずカメラビューが現れます。

そこで、別のビュー(OverlayView)を保ったまま、インカメだけを利用して別のビュー(OverlayView)の画面をタップして写真が撮れる方法を探しています。

カメラ起動でOverlayViewを上に乗せる事は出来たのですが、シャッターの切り方が分かりません。

ようは、カメラのインターフェイスを出さずに、カメラを撮る方法がないか試行錯誤していて、  
カメラを起動した時にその上に別のViewを作り、そこでゲーム的なアニメーションを作る方法でどうかと思いました。  
根本的に考え方が間違っているのかも？

どなたかご教授願えないでしょうか？ よろしくお願い致します。

試しているコードは下記の通りです。

ViewController.swift

[code]

    import UIKit
    
    class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIGestureRecognizerDelegate {
    
        @IBOutlet weak var photoLibraryButton: UIButton!
    
        @IBOutlet weak var cameraButton: UIButton!
    
        @IBOutlet weak var photoImageView: UIImageView!
    
    //   let overlayview = OverlayView()
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
    
    //        overlayview .removeFromSuperview()
    
    
        }
    
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
            // Dispose of any resources that can be recreated.
        }
    
        @IBAction func photoLibraryAction(sender: UIButton) {
    
            let picker = UIImagePickerController()
    
            picker.delegate = self
    
            picker.sourceType = .PhotoLibrary
    
            picker.allowsEditing = true
    
            presentViewController(picker, animated: true, completion: nil)
    
        }
    
        // カメラを起動
        @IBAction func cameraAction(sender: UIButton) {
    
            let picker = UIImagePickerController()
    
            picker.delegate = self
    
    
            if UIImagePickerController.isSourceTypeAvailable(.Camera)
            {
    
                picker.sourceType = .Camera
    
                let overlayView = OverlayView(frame: picker.view.frame)
    
                picker.cameraOverlayView = overlayView
    
    //            // 撮影ボタン等を隠す。
    //            picker.showsCameraControls = false
    
                // インカメで撮る。
                picker.cameraDevice = .Front
    
            }else{
                picker.sourceType = .PhotoLibrary
            }
    
            presentViewController(picker, animated: true, completion: nil)
    
    
        }
    
        // 撮影が完了した時に呼ばれる。
        func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
    
            if let pickedImage = info[UIImagePickerControllerOriginalImage] as? UIImage
            {
                photoImageView.contentMode = .ScaleAspectFit
                photoImageView.image = pickedImage
                saveImage()
            }
    
            // 閉じる処理
                dismissViewControllerAnimated(true, completion: nil)
        }
    
    
        // 写真を保存
        func saveImage()
        {
            let image: UIImage! = photoImageView.image
    
            if image != nil {
                UIImageWriteToSavedPhotosAlbum(image, self, #selector(ViewController.image(_:didFinishSavingWithError:contextInfo:)), nil)
            }else{
                print("error, image failed !")
            }
    
        }
    
        // 書き込み完了結果の受け取り
        func image(image:UIImage, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutablePointer<Void>)
        {
            if error != nil {
                print(error.code)
                print("Save Failed !")
            }
            else{
                print("Save Succeeded")
            }
        }
    
    
        // 撮影をcancel
        func imagePickerControllerDidCancel(picker: UIImagePickerController) {
            self.dismissViewControllerAnimated(true, completion: nil)
        }
    
    }
    
[/code]

OverlayView.swift

[code]

    import UIKit
    
    class OverlayView: UIView {
    
        var view : UIView!
    
    
        @IBOutlet weak var ratImage: UIImageView!
    
    
        override init(frame: CGRect) {
            super.init(frame: frame)
            setup()
        }
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
            setup()
        }
    
        // xibからカスタムViewを読み込んで準備する
        func setup()
        {
            // MyCustomView.xib からカスタムViewをロードする
            let bundle = NSBundle(forClass: self.dynamicType)
            let nib = UINib(nibName: "OverlayView", bundle: bundle)
            let view = nib.instantiateWithOwner(self, options: nil)[0] as! UIView
    
            addSubview(view)
    
            // カスタムViewのサイズを自分自身と同じサイズにする
            view.translatesAutoresizingMaskIntoConstraints = false
            let bindings = ["view": view]
            addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[view]|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: bindings))
            addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[view]|", options: NSLayoutFormatOptions(rawValue:0), metrics: nil, views: bindings))
    
        }
    
    
    
        @IBAction func testButtonTapped(sender: UIButton) {
    
            print("button tapped")
    　　　　// ここでシャッターが切れるようにして写真やビデオを撮影する
        }
    
        /*
        // Only override drawRect: if you perform custom drawing.
        // An empty implementation adversely affects performance during animation.
        override func drawRect(rect: CGRect) {
            // Drawing code
        }
        */
    
    }
    
[/code]


CC BY-SA 3.0
2016-05-20T09:02:00.513
25032
2016-05-20T10:39:26.390
2016-05-20T10:39:26.390
3068
15017
question
swift ios xcode camera video
cameraアプリのcameraOverlayViewの方法