LoginSignup
14
11

More than 5 years have passed since last update.

AVCam-iOSをSwiftで実装し直してみる

Last updated at Posted at 2016-04-25
2017/05/02 追記

iOS10になってからまた仕様が変わり、いくつかのメソッドが非推奨になってます。
そのせいか、Appleから公式にAVCamのSwift版サンプルが出て要るので、今後はそちらを参照してもらった方がいいでしょう。

AVCam-iOS

以上


カメラや動画を扱ういいサンプルはないかと探していたら、そもそもAppleがいいものを出してくれていました。

AVCam-iOS: Using AVFoundation to Capture Images and Movies

カメラと動画を扱うサンプル

AVCamManual: Extending AVCam to Use Manual Capture API

上記の機能プラスカメラのホワイトバランスやフォーカスを手動出来る仕組みがついてくる

ただどちらもObjective-Cで実装されていてるので、とりあえず上の方をSwiftで実装してgithubにあげました。

AVCamSample

以下実装していて気になった箇所

available

iOSのバージョンで条件分けしたい時とかに使います。変更の多いSwiftでは必須の機能か

if #available(iOS 9.0, *){

cast from 'UIDeviceOrientation' to uncleard type 'AVCaptureVideoOrientation' always fails

以下の実装時の警告

previewLayer.connection.videoOrientation = deviceOrientation as! AVCaptureVideoOrientation

Objective-Cでは問題ないのだけど、Swiftでは警告が出ます。
この 〜always failsって普通にエラーになるのでは・・・と思ったので以下のように修正。
もっと簡単に出来そう

previewLayer.connection.videoOrientation = { () -> AVCaptureVideoOrientation in
                switch deviceOrientation {
                case .Portrait:
                    return AVCaptureVideoOrientation.Portrait
                case .LandscapeLeft:
                    return AVCaptureVideoOrientation.LandscapeLeft
                case .LandscapeRight:
                    return AVCaptureVideoOrientation.LandscapeRight
                case .PortraitUpsideDown:
                    return AVCaptureVideoOrientation.PortraitUpsideDown
                default:
                    return AVCaptureVideoOrientation.Portrait
                }
                }()

とりあえずほぼ写経に近い感じでやったのでもっとSwiftの良さを活かした実装がありそうに思う。
例えばRxSwiftで非同期部分を扱ってみるとか・・・時間が出来たらやってみたいです。

14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11