問題タブ [device-orientation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - コンパスを含むAndroid携帯の向きの概要
私はしばらくの間、Androidの向きセンサーに頭を悩ませようとしてきました。わかったと思いました。それから私はそうしなかったことに気づきました。今、私は(願っています)私はそれに対して再び気分が良くなったと思いますが、それでも私は100%ではありません。私はそれについての私のパッチの理解を説明しようとします、そしてうまくいけば、私が部分的に間違っているか、空白を埋めるならば、人々が私を訂正することができるでしょう。
経度0度(本初子午線)と緯度0度(赤道)に立っていると思います。この場所は実際にはアフリカの沖合の海にありますが、私には耐えてください。電話の底が私の足を指すように、電話を顔の前に持っています。私は北を向いている(グリニッジを向いている)ので、電話の右側は東をアフリカに向けています。この方向(下の図を参照)では、X軸は東を指し、Z軸は南を指し、Y軸は空を指します。
これで、電話のセンサーを使用して、この状況でのデバイスの向き(場所ではなく)を把握できます。この部分はいつも私を混乱させてきました。おそらく、それが正しく機能することを受け入れる前に、何かがどのように機能するかを理解したかったからです。電話は2つの異なる技術の組み合わせを使用してその向きを解決しているようです。
その前に、緯度と経度が0度で、上記の方向に立っている架空の土地に戻って立っていることを想像してみてください。また、目隠しをして、靴が遊び場のラウンドアバウトに固定されていると想像してみてください。誰かがあなたを後ろに押し込んだ場合、あなたは前に(北に向かって)倒れ、両手を出してあなたの転倒を壊します。同様に、誰かがあなたの左肩を押した場合、あなたはあなたの右手に倒れます。内耳には「重力センサー」(youtubeクリップ)があり、前方/後方に落下しているか、左/右に落下しているか、落下(または上向き!!)しているかを検出できます。したがって、人間は電話と同じX軸とZ軸の周りの位置合わせと回転を検出できます。
ここで、誰かがラウンドアバウトであなたを90度回転させて、あなたが今東を向いていると想像してください。Y軸を中心に回転しています。この軸は、生物学的に検出できないため、異なります。ある程度の角度があることはわかっていますが、惑星の磁北極との関係で方向がわかりません。代わりに、外部ツール...磁気コンパスを使用する必要があります。これにより、私たちがどちらの方向を向いているかを確認できます。同じことが私たちの電話にも当てはまります。
現在、電話には3軸加速度計もあります。私は持っていませんそれらが実際にどのように機能するかを考えますが、私が視覚化する方法は、重力を空から降る一定で均一な「雨」として想像し、上の図の軸を流れる雨の量を検出できるチューブとして想像することです。電話を直立させた状態で、すべての雨がY'チューブ'を通って流れます。画面が空に向くように電話を徐々に回転させると、Yを流れる雨の量はゼロに減少し、Zを流れる音量は、最大の雨が流れるまで着実に増加します。同様に、電話を横向きに傾けると、Xチューブは最終的に最大量の雨を集めます。したがって、3つのチューブを流れる雨の量を測定することにより、電話の向きに応じて、向きを計算できます。
電話には、通常のコンパスのように動作する電子コンパスもあります。その「仮想針」は磁北を指しています。Androidは、これら2つのセンサーからの情報をマージして、SensorEvent
のTYPE_ORIENTATION
が生成されるたびに、values[3]
配列の
値が[0]:方位角-(磁北の東にあるコンパス)
値[1]:ピッチ、x軸を中心とした回転(電話です)前傾または後傾)
値[2]:y軸を中心に回転、回転(電話は左側または右側に傾いています)
したがって、Androidが3番目の加速度計の読み取り値ではなく方位角(コンパス方位)を提供する理由は、コンパス方位の方が便利だからだと思います(つまり、わかりません)。SensorEvent
タイプのsのシステムにリスナーを登録する必要があるように思われるため、なぜこのタイプのセンサーが非推奨になったのかわかりませんTYPE_MAGNETIC_FIELD
。イベントのvalue[]
配列をメソッドに渡してSensorManger.getRotationMatrix(..)
、回転行列(以下を参照)を取得し、それをメソッドに渡す必要がありSensorManager.getOrientation(..)
ます。Androidチームが非推奨になった理由を誰かが知っていますSensor.TYPE_ORIENTATION
か?それは効率的なものですか?これは、同様の質問へのコメントの1つに含まれていることですが、別のタイプのリスナーを登録する必要があります。development / samples / Compass / src / com / example / android / compass/CompassActivity.javaの例。
ここで、回転行列について説明します。(これは私が最も確信が持てないところです)したがって、上記のAndroidドキュメントからの3つの図は、A、B、およびCと呼びます。
A = SensorManger.getRotationMatrix(..)メソッドの図であり、世界の座標系を表します
C = SensorManager.getOrientation(..)メソッド図
したがって、私の理解では、Aは「世界の座標系」を表します。これは、惑星上の場所がオプションの(高度)との(緯度、経度)カップルとして与えられる方法を指していると思います。Xは「東」座標、Yは「北」座標です。Zは空を指し、高度を表します。
電話の座標系を図Bに示します。固定されています。そのY軸は常に上を指します。回転行列は電話によって常に計算されており、2つの間のマッピングが可能です。それで、回転行列がBの座標系をCに変換すると考えるのは正しいですか?したがって、SensorManager.getOrientation(..)
メソッドを呼び出すときは、図Cに対応する値の配列を使用values[]
します。電話が空を指す場合、回転行列は単位行列(数学的に1に相当する行列)です。これは、デバイスが位置合わせされているため、マッピングが不要であることを意味します。世界の座標系で。
Ok。今はやめたほうがいいと思います。私が前に言ったように、私がどこで人々を台無しにしたか、または人々を助けた(またはさらに人々を混乱させた!)人々が私に教えてくれることを願っています
javascript - ビューポートの向きを検出します (向きが縦向きの場合) ユーザーに指示を伝える警告メッセージを表示します
モバイルデバイス専用のウェブサイトを構築しています。特に、横向きモードで表示するのが最適なページが 1 つあります。
そのページにアクセスしているユーザーがポートレート モードでページを表示しているかどうかを検出する方法はありますか? もしそうなら、そのページはランドスケープ モードで表示するのが最適であることをユーザーに通知するメッセージを表示しますか? ユーザーがすでに横向きモードで表示している場合、メッセージは表示されません。
したがって、基本的には、サイトでビューポートの向きを検出し、向きがPortraitの場合、このページは横向きモードで表示するのが最適であることをユーザーに通知する警告メッセージを表示します。
objective-c - 一部のビューで自動回転を単一の方向に制限し、他のビューではすべての方向を許可するにはどうすればよいですか?
この質問は、iOSデバイスの回転とUINavigationControllerの複数の制御されたビューに関するものです。一部のビューは縦向きに制限する必要があり、一部は自由に自動回転する必要があります。3つのビューを使用して最も単純なセットアップを作成しようとすると、自動回転の動作にいくつかの非常に厄介な癖があることに気付くでしょう。ただし、シナリオは非常に単純なので、自動ローテーションの実装が正しく行われていないか、何かを忘れていると思います。
私は奇妙さを示す非常に基本的なデモアプリを持っていて、それが実際に動作していることを示すビデオを作成しました。
セットアップは非常に基本的です。3つのViewControllerは、と呼ばれ、FirstViewController
すべてがクラス名のラベルを表示し、デバイスが縦向きの場合にYESを返すを拡張します。SecondViewControllerは、このメソッドをオーバーライドして、すべての回転を許可します。3つの具象クラスはすべて、いくつかの色付きの正方形を追加して、コントローラーをオン/オフすることでビュー間を移動できるようにします。これまでのところ、非常に単純なシナリオだと思います。SecondViewController
ThirdViewController
AbstractViewController
shouldAutorotateToInterfaceOrientation:
UINavigationController
デバイスを縦向きまたは横向きに持っている場合、これは私が達成したいだけでなく、期待する結果です。最初の画像では、すべてのビューが「直立」していることがわかります。2番目の画像では、2番目のビューコントローラーのみがデバイスの向きを逆回転させていることがわかります。明確にするために、横向きモードの2番目のビューから3番目のビューに移動できるはずですが、その3番目は縦向きのみをサポートしているため、縦向きでのみ表示する必要があります。結果に問題がないかどうかを確認する最も簡単な方法は、キャリアバーの位置を確認することです。
しかし、実際の結果は完全に異なるため、この質問はここにあります。デバイスを回転させたときに表示されているビューに応じて、また次に移動するビューに応じて、ビューは回転しません(具体的には、didOrientFromInterfaceOrientation:
メソッドが呼び出されることはありません)。2番目の風景にいて、3番目に移動すると、2番目と同じ向きになります(=悪い)。ただし、2番目から最初に戻ると、画面が「強制」ポートレートモードに回転し、持ち方に関係なく、キャリアバーがデバイスの物理的な上部に表示されます。ビデオはこれをより詳細に示しています。
私の質問は2つあります:
- 最初のViewControllerが回転して戻るのに、3番目は回転しないのはなぜですか?
- 一部のビューのみを自動回転させ、他のビューは自動回転させたくない場合に、ビューから正しい動作を取得するには、何をする必要がありますか?
乾杯、EP。
編集:賞金をかける前の最後の手段として、私はこの質問を完全に書き直して、より短く、より明確に、そしてうまくいけば、答えを与えるためにより魅力的にしました。
android - Android: 関数 remapCoordinateSystem を理解する
私はこれらの2行のコードを理解しようとしています
のドキュメントremapCoordinateSystem()
を読みましたが、道に迷っています。
誰かが私に正確に何を説明し、何をすることができますgetRotationMatrix
かremapCoordinateSystem
? 特にSensorManager.AXIS_X
, SensorManager.AXIS_MINUS_Z
?
jquery - onload で orientationEvent を評価しますか?
私は Web アプリに取り組んでおり、orientationEvent に基づいてコンテンツを変更する必要があります。これまでのところうまく機能しており、向きを変えるとコンテンツが変更および設定されます。ただし、onLoad で起動するには、orientationEvent も必要です。これは可能ですか?
jquery - オリエンテーションイベントを評価し、値を設定しますか?
向きの変更が発生したときにonChange関数を起動する場合、jqueryセレクターを更新するonChange内の値を設定するにはどうすればよいですか。例えば:
iphone - アプリケーション ウィンドウの一部としての iPhone の UITabBar。デバイスを回転させるときの問題
Navigation Controller を使用してトップバーを表示する iPhone アプリケーションがあります (タイトルと戻るボタンなど)。
アプリケーション ウィンドウにを追加しましたUITabBar
。これにより、その部分を切り替えることができます。ViewController の各ビューにタブ バーを追加する代わりに、アプリ ウィンドウにバーを追加しました。
(私がViewControllerに持っていたとき、コントローラーを切り替えると、アニメーション化されたポップ/プッシュがビュー全体とともに発生したときに、タブバーが左/右にスワイプしました)。
そこで、 を に追加し、UITabBar
それMainWindow.xib
をアプリ デリゲートの変数に結び付けました。私のdidFinishLaunchingWithOptions
方法では、次のコードを追加しました。
navigationController
TabBar を表示するために、メイン (の) ビューのサイズを変更します。
デバイスを回転させると問題が発生します。ビューがウィンドウ全体に引き伸ばされ、TabBar を表示できなくなります。
- (void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation) fromInterfaceOrientation
次のコードを使用して、ViewController にメソッドを追加しました。
ビューのサイズを変更し、タブ バーをビューの上下の部分に移動します (ここでは、縦向き/縦向きの逆さまの向きのみを許可します)。問題は、TabBar も逆さまになっていて、クリックできなくなっていることです。
以下の画像のようになります。
この種の状況を処理する方法を知っている人はいますか?または、タブバーをView Controllerに関連付けずに、インターフェイスの回転をスムーズに処理できるようにする方法は?
html - モバイルサファリで向きを変えた後に幅が増えるのを防ぐ方法
iPadのMobileSafariで、デバイスの向きを変更した後、奇妙な動作が発生します。これが私のテストファイルです:
次のURLでMobileSafariで表示できます。
http://fiddle.jshell.net/eterps/jsTqj/show/
iPadを縦向きにしてURLに移動し、スワイプジェスチャを行うと、ページがスクロールしません。これは正しいことです。
ただし、デバイスを横向きモードに回転させてスワイプジェスチャを行うと、明らかな理由もなく、右側に余分なスペースができました。
しかし、さらに奇妙なのは、モバイルサファリを再起動して、常に横向きでURLにアクセスすると、右側の余分なスペースが存在しないという事実です。
向きを変えた後、右側に余分なスペースが表示されるのはなぜですか?そして、どうすればそれを防ぐことができますか?
ios - 「UIDeviceOrientationDidChangeNotification」を正しく投稿するには?
UIViewController
デバイスの向きで再適用レイアウトを通知しようとしています。これを行うために、UIDeviceOrientationDidChangeNotification
デフォルト センターに投稿しています。機能しましたが、回転アニメーションはありませんでした。欠けていたものがあると思います。どうすればUIDeviceOrientationDidChangeNotification
正しく投稿できますか?
iphone - デバイスの回転 手動でビューを回転
この方法を使用して、方向に応じていくつかのビューとサブビューを手動で回転させています。
これで横向きから縦向きに回転できますが、横向きに回転しようとすると、フレーム CGRect は論理的な意味を持ちません ((200,-50, width, height) のように見えます)。縦向きのフレームを設定します。self.view.frame や境界などのフレームを取得すると、回転するたびに変化します。
より論理的でハードコードされていないフレームを設定するより良い方法はありますか?