1

加速度計のイベントハンドラーがUIAcceleration *次のようになっている場合:

-(void) accelerometer:(UIAccelerometer *)accelerometer 
            didAccelerate:(UIAcceleration *)acceleration {

次にViewController、インスタンス変数がある場合:

UIAcceleration accelerationCurrent;

次に、加速度を現在の状態として記憶するために、

accelerationCurrent = *acceleration;

加速度計イベントハンドラーで。しかし、.hファイル内のインスタンス変数宣言は、「インターフェースタイプを静的に割り当てることができない」というエラーを出しました。

UIAccelerationx、y、zの3つの倍精度だと思ったので、そこで使用できるのであればCGPoint aPoint、どうして使用できないのでしょうか。UIAcceleration accelerationCurrentまた、x、y、zを個別にコピーせずに、1つのUIAccelerationオブジェクトを使用して加速を維持するにはどうすればよいでしょうか。(代わりにポインターを宣言し、ポインター(参照)をコピーすると、加速度計イベントハンドラーを離れるときに、ポインターが不正なメモリスペースを指している可能性があります)。

4

1 に答える 1

3

UIAcceleration4つのデータメンバー(x、y、z、およびタイムスタンプ)しかない場合でも、それはではないstructため、静的に参照することはできません(つまり、ポインターを使用する必要があります)。CGPointこれは、Cであるとは対照的であるstructため、ポインターを介して、またはポインターなしで使用できます。

残念ながら、関心のある値をコピーする方法はありません。スレッドがハンドラーを離れると、UIAccelerationオブジェクトが背後で再利用される可能性があることは間違いありません。UIAccelerationコピープロトコルにも準拠していないため、そのコピールーチンを自分で作成する必要があります。

于 2012-04-27T02:36:42.950 に答える