質問

私はいつも対決したいというuiviewを持っています。したがって、矢印があるuiimageViewがあるとし、デバイスがどのように保持されていても、それが指摘されているとします。明らかに加速度計が必要ですが、座標に基づいて画像を回転させるように指示することは、回転が相対的であるため、初めてうまくいくのです。これを行う簡単な方法はありますか?このようなことをするどこかに簡単な例アプリがあると感じています。

役に立ちましたか?

解決

Appleには、必要なものを正確に行うサンプルコードがあります。これを見てください: http://developer.apple.com/library/ios/#samplecode/whichwayisup/introduction/intro.html

特定のモーションデータを受信するには、の共有インスタンスを使用します UIAccelerometer そして、それは代表です。 http://developer.apple.com/library/ios/documentation/uikit/reference/uiaccelerotoremerdelegate_protocol/uiaccelerotoremoterdelegate/uiaccelerotoremerdelegate.html#/apple_ref/occ/intf/uiaccelerometherdelegate

回転に関する限り、私はよくわかりません。こちらの「bubblelevelevel」サンプルコードをご覧ください。 http://developer.apple.com/library/ios/samplecode/bubblelevel/introduction/intro.html#//apple_ref/doc/uid/dts40007331

アクセルメーターの委任ドキュメントには、それとその他の関連するサンプルコードが参照されます。

他のヒント

whithwayisup あなたが探しているサンプルアプリケーション - iOSリファレンスライブラリ(素晴らしいドキュメント!)

ビューに適用される変換は累積的ではありません。むしろ、ビューは親の座標系に整合し始め、変換はそれに対して適用されます。

他の答えが暗示しているように、Appleに十分な部分があります BubbleLevelサンプルコード あなたが探していることを達成するために。 -[LevelViewController accelerometer:didAccelerate:] 既に、重力ベクトルの平滑化されたスクリーン関連回転成分を抽出する方法の例が含まれています。

// Use a basic low-pass filter to only keep the gravity in the accelerometer values for the X and Y axes
accelerationX = acceleration.x * kFilteringFactor + accelerationX * (1.0 - kFilteringFactor);
accelerationY = acceleration.y * kFilteringFactor + accelerationY * (1.0 - kFilteringFactor);

// keep the raw reading, to use during calibrations
currentRawReading = atan2(accelerationY, accelerationX);

の座標系が与えられます uiaccelerationatan2, 、あなたのビューの望ましい回転を計算するために留意する必要があるいくつかの要因があります:

  1. デバイスがポートレートで直立しているとき、 atan2 入力重力ベクトルは{0.0、-1.0、0.0}であるため、-π/2(-90°)を返します。
  2. CGAffineTransformMakeRotation 指定されたラジアンの数によって時計回りに(iOSで)回転する変換を作成しますが、 atan2 反時計回りの回転を指定します。

したがって、その親ビューがポートレートの画面で方向に向けられていると仮定して、あなたのビューを - (currentRawReading +π/2)で回転させたいと思うでしょう。

view.transform = CGAffineTransformMakeRotation(-(currentRawReading + M_PI/2));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top