・実現したいこと
画面A(画面向き:横)からボタンを押してカメラモードに移行(この時画面向き:縦に変更)。その後カメラモードから画面Aに戻る際に画面の向き:横に戻してオブジェクトの位置を再編成させる関数を通す。
※画面Aは縦画面と横画面でレイアウトが違うものになっているため画面向き変更があるたび逐一オブジェクト位置を再編成する必要があります。
・結果
カメラ→画面Aに戻る際に画面向きは変更できているのですが、オブジェクトが指定の場所に配置されません。デバッグで値をひとつひとつ確認したところ所定の座標の値がとれているはずなのですが、実際には画面上の違う場所に配置されてしまいます。
原因?
画面の向き変更をviewWillAppear内で以下のコードで行なっています。
UIDevice.current.setValue(value, forKey: "orientation")
・画面向きを変更するコード
・画面向きを変更する場所
などが原因なのかと思っていますがなかなかうまくいきません。
ご回答お待ちしております。。。
なにか参考にされた記事はありますか?
viewWillAppearで回転処理を行ったり、強制的に回転させたり、やり方がかなり古いように感じるのですが。
「カメラモード」というのは画面Aとは別のViewControllerなんでしょうかね?
fuzzball様
viewWillAppear内に書くということについては以下の記事を参考にさせていただきました。
https://teratail.com/questions/47254
最近Swiftでの開発を始めたものでどれが最新の方法なのかわからず日々右往左往しております。
takabosoft様
その通りです。
「※画面Aは縦画面と横画面でレイアウトが違うものになっているため画面向き変更があるたび逐一オブジェクト位置を再編成する必要があります。」というのは、どのトリガーで実行されているのでしょうか?また、AutoLayoutは使っていますか?
リンク先の質問には画面回転については触れてないですね。
回転については一度調べてみた方がいいと思います。(複数の新しめの情報に当たって下さい)
あと、強制回転はどこかでハマりますよ。やらずに済むならやらない方がいいです。(裏技だと思っておいたほうがいいです)
takabosoft様
オブジェクト位置再編成はviewDidLoad、supportedInterfaceOrientationsの2箇所で実行するようにしています。AutoLayoutについてはView内部に入れているオブジェクトには使用していますが、オブジェクト位置再編成の関数で実際に移動するオブジェクトに関してはAutoLayoutは使用していません。
fuzzball様
回転についてはもう一度調べてみようと思います。
カメラモードをLandscapeのままで実行すると実際にカメラを上にあげると画面上では左に移動したりするのでどうしてもPortraitに変更する必要があると思い、回転処理を施したのですが、何か良い方法はあったりしないでしょうか・・・
takabosoft様
ごめんなさい間違えてました。
AutoLayoutじゃなくてAutoResizeの間違いです。
AutoLayoutは一切使っていません。
回答1件
あなたの回答
tips
プレビュー