【簡単】iOSでカメラアプリを作る時の実装の3タイプ

次のサイトにあるサンプルコードを使えばそれだけでカメラ機能を実装することができます.

ただ,カメラ実装方法2のAVFoundation FrameworkのAVCaptureStillImageOutputを使用する方法を使うときに,デフォルトのままだと,

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill;

となっていて,iPadとかの画面が大きいデバイスだと,表示されている画像とデバイスに保存する画像とで見え方が違うなどの問題が生じます.なので,videoGravity部分に注意して,下の3つのどれか指定してあげればよいです.大きい画面だと

layer.videoGravity = AVLayerVideoGravityResizeAspect;

がいいと思います.iPhoneとか小さい画面サイズならあまり影響しないので気にしなくていいかも?stack overflowにも同じ質問あったのと,自分も悩んだのでまとめてみました.

Objective-C実装

AVCaptureVideoPreviewLayer *layer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:self.session];

 //サイズ指定一覧
 //縦横とも収まるサイズ 
 layer.videoGravity = AVLayerVideoGravityResizeAspect;

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill;

 //全画面表示へリサイズ(画面を引き延ばし) 
 layer.videoGravity = AVLayerVideoGravityResize;

Swift実装

    let layer = videoPlayerView.layer as AVPlayerLayer

 //サイズ指定一覧
 //縦横とも収まるサイズ )
 layer.videoGravity = AVLayerVideoGravityResizeAspect

 //縦いっぱいに表示(横がはみ出る) 
 layer.videoGravity = AVLayerVideoGravityResizeAspectFill
  
 //全画面表示へリサイズ(画面を引き延ばし) 
 layer.videoGravity = AVLayerVideoGravityResize