

はじめまして。

現在、 Swift で動画撮影アプリを制作しておりますが、デバイスを縦横に回転させた際の処理で困っています。

デバイスを傾けたときに、撮影枠は縦横対応にうまく対応できたのですが、それに伴って被写体がうまく回転してくれません。いろいろ調べていますが、アプリ開発の初心者ということもあり、いまいち修正ポイントがわかっていません。

画面回転時のメソッドの中で、 `CameraEngine.swift` の `startup`
処理の何かを再度、設定するべきなのかなど、初心者なりに悩んでおります。

どなたか、アドバイスをいただけないでしょうか？何卒よろしくお願いいたします。

以下に、修正すべきところと思われるソースの一部を抜粋させていただきます。

【ViewController.swift】

[code]

    override func viewDidLoad(){
        super.viewDidLoad()
    
        // カメラエンジンスタート
        self.cameraEngine.startup()
    
        videoLayer = AVCaptureVideoPreviewLayer.layerWithSession(self.cameraEngine.captureSession) as AVCaptureVideoPreviewLayer
    
        // 画面セットアップ
        setupScreen()
    }
    
    // 画面回転時に呼び出される
    override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) {
    
        // 画面セットアップ
        setupScreen()
    }
    
    // 画面セットアップ
    func setupScreen(){
        // ビデオレイヤー設定
        videoLayer.frame = self.view.bounds
        videoLayer.videoGravity = AVLayerVideoGravityResizeAspectFill
        self.view.layer.addSublayer(videoLayer)
    }
    
[/code]

【CameraEngine.swift】

[code]

    func startup(){
    
        // video input
        self.videoDevice.activeVideoMinFrameDuration = CMTimeMake(1, 30)
    
        var captureDevice: AVCaptureDevice?
        // バックカメラ
        captureDevice = self.videoDevice
    
        let videoInput = AVCaptureDeviceInput.deviceInputWithDevice(captureDevice, error: nil) as AVCaptureDeviceInput
    
        self.captureSession.addInput(videoInput)
    
        // audio input
        let audioInput = AVCaptureDeviceInput.deviceInputWithDevice(self.audioDevice, error: nil)  as AVCaptureDeviceInput
        self.captureSession.addInput(audioInput);
    
        // video output
        var videoDataOutput = AVCaptureVideoDataOutput()
        videoDataOutput.setSampleBufferDelegate(self, queue: self.recordingQueue)
        videoDataOutput.alwaysDiscardsLateVideoFrames = true
        videoDataOutput.videoSettings = [
            kCVPixelBufferPixelFormatTypeKey : kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange
        ]
        self.captureSession.addOutput(videoDataOutput)
    
        self.height = videoDataOutput.videoSettings["Height"] as Int!
        self.width = videoDataOutput.videoSettings["Width"] as Int!
    
        // audio output
        var audioDataOutput = AVCaptureAudioDataOutput()
        audioDataOutput.setSampleBufferDelegate(self, queue: self.recordingQueue)
        self.captureSession.addOutput(audioDataOutput)
    
        self.captureSession.startRunning()
    }
    
[/code]

【追記】20150121  
![デバイス横のイメージ](https://i.stack.imgur.com/m1WyV.png)  
デバイス横のイメージ

![デバイス縦のイメージ](https://i.stack.imgur.com/Vhs7z.png)  
デバイス縦のイメージ


CC BY-SA 3.0
2015-01-20T01:38:34.937
4873
2015-01-21T01:18:39.640
2015-01-21T01:18:39.640
7571
7571
question
ios swift
iOS (Swift) で、動画撮影中のデバイス回転時の処理について