はじめまして。

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

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

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

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

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

【ViewController.swift】

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

【CameraEngine.swift】

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

【追記】20150121
デバイス横のイメージ
デバイス横のイメージ

デバイス縦のイメージ
デバイス縦のイメージ