縦向き・横向きでもきちんと本体向きを維持して画像を保存したかったが難儀した。
デバイスの回転がロックされている場合、簡単には向きが取得できなかった。
・・・なんかデバイスの向きとUIの向きとカメラの向き別らしいんすよ。
デバイスの向きの取得方法
案① 普通にデバイス情報から取得
※回転ロック時は検知できないデバイスの向きの設定と取得の方法
案② Notificationを使用して検知・通知
※回転ロック時は検知できないiPhone, iPadの画面の向きを検出する方法まとめ
UIDeviceOrientationからAVCaptureVideoOrientationを決める
案③ モーションセンサーを使って取得する
MotionOrientation多分これが一番確実だと思います(棒
本体の回転角度からどの向きになっているか取得するライブラリ。
Apache Licence2.0だそうです。
実際に取り込んでみて、回転ロック時・非ロック時に期待の挙動となることを確認できました。
画像ファイルへの設定方法
以下を参考に、Exif情報に向きを付与します。Exif情報の扱いは過去記事参照で。
switch (orientation) { case UIDeviceOrientationPortrait: LOG_I(UIDeviceOrientationPortrait); [metadataAsMutable setObject:[NSNumber numberWithInt:1] forKey:(NSString *)kCGImagePropertyOrientation]; break; case UIDeviceOrientationPortraitUpsideDown: LOG_I(UIDeviceOrientationPortraitUpsideDown); [metadataAsMutable setObject:[NSNumber numberWithInt:3] forKey:(NSString *)kCGImagePropertyOrientation]; break; case UIDeviceOrientationLandscapeLeft: LOG_I(UIDeviceOrientationLandscapeLeft); [metadataAsMutable setObject:[NSNumber numberWithInt:8] forKey:(NSString *)kCGImagePropertyOrientation]; break; case UIDeviceOrientationLandscapeRight: LOG_I(UIDeviceOrientationLandscapeRight); [metadataAsMutable setObject:[NSNumber numberWithInt:6] forKey:(NSString *)kCGImagePropertyOrientation]; break; default: LOG_I(orientation); break; }
0 件のコメント:
コメントを投稿