1

常に上向きにしたい UIView があります。したがって、矢印のある UIImageView があり、デバイスがどのように保持されていても、それは上を向いているとします。明らかに加速度計が必要ですが、回転は相対的であるため、座標に基づいて画像を回転するように指示することは、最初に考えたときにのみ機能します。これを行う簡単な方法はありますか?このようなことを行う簡単なサンプルアプリがどこかにあるような気がします。

4

3 に答える 3

3

Appleには、あなたが望むことを正確に実行するサンプルコードがあります。これを見てください:http://developer.apple.com/library/ios/#samplecode/WhichWayIsUp/Introduction/Intro.html

特定のモーションデータを受信するには、の共有インスタンスUIAccelerometerとそのデリゲートを使用します。 http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIAccelerometerDelegate_Protocol/UIAccelerometerDelegate/UIAccelerometerDelegate.html#//apple_ref/occ/intf/UIAccelerometerDelegate

ローテーションに関しては、よくわかりません。ここで「BubbleLevel」サンプルコードを見てください:http://developer.apple.com/library/ios/samplecode/BubbleLevel/Introduction/Intro.html#//apple_ref/doc/uid/DTS40007331

加速度計のデリゲートドキュメントは、それと他の関連するサンプルコードを参照しています。

于 2011-02-02T04:26:25.833 に答える
0

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

于 2011-02-02T04:26:20.223 に答える
0

ビューに適用される変換は累積されません。むしろ、ビューはその親の座標系に位置合わせされて開始され、変換はそれに対して適用されます。

他の回答が暗示しているように、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));
于 2011-02-04T06:49:00.553 に答える