スポンサーリンク

【Swift】Preview ViewのUIImageを90°回転させて、Storyboard上のUICameraの横画面対応する紹介。(AVCaptureの.connect不使用)

Swift
スポンサーリンク

今回の記事はSwiftを使ってカメラ操作を行いカメラ画面を横画面にできるところまでの記事です。なかなか参考記事も少なく、また、参考記事の通りに行っても、うまくいかないという事態が起きていたのでその際の回避方法も併せて記載しています。

スポンサーリンク

AVCaptureVideoPreviewLayerでの横画面対応コード編集失敗

このクラスはビデオ映像関連の全てをになっていると考えてもいいと思われます。
ここの内部で下記コードを実行して表示を変更すればカメラ画面を横向きにできると記載ある記事が多くこれにしたがったのですができませんでした。

 layer.connection(with: .video)?.videoOrientation = .portrait
//下 .portrait→.landscapeLeft
 layer.connection(with: .video)?.videoOrientation = .landscapeLeft

こちらはカメラ操作用のviewcontrollerとは別のファイル内に記載のあったクラスの内での変更したのですが、これでは画面の表示はそのままでした。。
そもそもlayerがconnectメソッドに対応できていないのか、強制型の「!」をつけるとエラーになりnil許容型の「?」をつけてエラーを回避していたのですが、値をみるとnilになっており、その原因が全くわからない状況でした。。
(ちなみに、layerは他のメッソドどは通常の働きをしてくれています。例えば画面をスクリーンいっぱいに自動で調節してくれる「videoGravity」とか。)

もしかしたらここが別ファイルになっていたとこが今思えば原因なのかも。わかる人教えてください。。

てなわけで時間もなかったのでこの原因はまた調べるとして次に他の方法を模索。

そもそも画面を横に対応させずにした場合はiPhoneを傾けると画面も追従してくるということは傾きを検知させる何かがいて、その何かが傾きによって画面の見える部分を移動させているということは何となく分かったので、その画面の見える部分が「何か」、また、その「画面の方を補正してカメラの角度に対応」させればいいんじゃないかと考え下記に進みます。

previewView(UIImage)90度傾けて横画面対応

こちらはUIimageのクラス、つまり画面表示のをになっているクラスです。
カメラ映像が全てPreviewViewに表示されている仕組みとStoryboardから読み解いたので、この画面を90度傾けようと考えました。

ちなみに本当にこのpreviewViewがカメラ映像の表示かを確認する際に一度このPreviewViewを出力しているところであえてPreviewViewを表示させない様に変更したところ、真っ黒の画面が表示され画面表示をになっていることを突き止めました。

またこれも補足ですが、previewViewを消してもカメラの映像は入力されている様でしたのでこのクラスは画面表示のみをになっていることもこれでわかります。

imageを傾けるのみだとそこまで難しくありません。

画面表示関連はviewcontrollerで実装する必要があるので、viewcontrollerの本当にした部分のページが読み込まれた際にすぐ実行される部分に下記を付け加えます。

override func viewDidLoad() {
    super.viewDidLoad()
    let angle = 90 * CGFloat.pi / 180
    var transRotate = CGAffineTransform()
    transRotate = CGAffineTransform(rotationAngle: CGFloat(angle));
    previewView.transform = transRotate
    ...
}

このコードはangleで角度を記載してその角度回転させるという簡単なものでネットからの広いもんですがいい感じに働いており、表示が横画面でも違和感なく動いていることがかくにんできております。

本記事を読んでいただき感謝です。サイトを訪れていただいた方はプログラミング勉強中かと思いますのでプログラミング勉強のコツを合わせてご紹介。

スポンサーリンク
スポンサーリンク
スポンサーリンク

ブログに関しては500円程度かかりますが、それ以外は無料です。知識の吸収と並行してアウトプットは非常に効率が良いです。テックアカデミーに関しては講座レベルが高いにも関わらず、無料体験や人気口座も大幅値下げがあるので、重点的に学びたいものを無料体験してみてください。

転職時にも、エンジニアからテックアカデミー・Paizaは認知度が高いので、未経験入社採用を行う際履歴書で目に留まります。特にPaizaのスキルレベルA・SなどはIT業界でも評価されます。

テックアカデミー・Paizaの無料登録ができる期間中にぜひご利用してみてください。私も活用経験ありです。

Swift
スポンサーリンク
スポンサーリンク
ともぶろぐ

コメント

タイトルとURLをコピーしました