mzgkworks

iOSを中心にプログラミング関係について書く

【Swift】カメラでの撮影時にデバイスの回転を抑止する方法

UIImagePickerControllerを使ってカメラを作成し、撮影時にデバイスの回転を抑止させる。
回転を固定にして撮影を行わせたい場合などに有効。

環境

UIImagePickerControllerのサブクラス作成

回転の抑止は、UIImagePickerControllerを継承したサブクラスを作成し、そこに記載する。
★の場所が該当コード。

import UIKit
import MobileCoreServices

class CameraViewController: UIImagePickerController {
    // ★向きの自動を許可をさせない
    override func shouldAutorotate() -> Bool {
        return false
    }

    // ★サポートする向きを指定する(LandscapeRight:ホームボタンが右側)
    override func supportedInterfaceOrientations() -> Int {
        return Int(UIInterfaceOrientationMask.LandscapeRight.rawValue)
    }

    // カメラの設定
    func setupCamera() {
        self.sourceType = UIImagePickerControllerSourceType.Camera
        self.mediaTypes = [kUTTypeMovie]
        ...
    }

呼び出し元の記述

以下のようにして呼び出しを行う。

// カメラ起動
@IBAction func runCamera(sender: UIButton) {
    let picker = CameraViewController() // 作成したサブクラス
    picker.delegate = self
    self.presentViewController(picker, animated: true, completion: nil)
}

// UIImagePickerControllerDelegate(閉じる・保存する)
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
    picker.dismissViewControllerAnimated(true, completion: nil)
    if let url = info[UIImagePickerControllerMediaURL] as? NSURL {
        UISaveVideoAtPathToSavedPhotosAlbum(url.path, self, "finishSaveVideo:didFinishSavingWithError:contextInfo:", nil)
    }
}

// 保存判定
func finishSaveVideo(videoPath: String, didFinishSavingWithError error: NSError!, contextInfo: UnsafeMutablePointer<Void>) {
    if (error != nil) {
        println("動画の保存に失敗しました。")
    } else {
        println("動画の保存に成功しました。")
    }
}