2017/05/02 追記
iOS10になってからまた仕様が変わり、いくつかのメソッドが非推奨になってます。
そのせいか、Appleから公式にAVCamのSwift版サンプルが出て要るので、今後はそちらを参照してもらった方がいいでしょう。
以上
カメラや動画を扱ういいサンプルはないかと探していたら、そもそもAppleがいいものを出してくれていました。
AVCam-iOS: Using AVFoundation to Capture Images and Movies
カメラと動画を扱うサンプル
AVCamManual: Extending AVCam to Use Manual Capture API
上記の機能プラスカメラのホワイトバランスやフォーカスを手動出来る仕組みがついてくる
ただどちらもObjective-Cで実装されていてるので、とりあえず上の方をSwiftで実装してgithubにあげました。
以下実装していて気になった箇所
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で非同期部分を扱ってみるとか・・・時間が出来たらやってみたいです。