まず、以下を使用してアクセラレータデータを追加しました。
UIAccelerometer *theAccelerometer = [UIAccelerometer sharedAccelerometer];
theAccelerometer.updateInterval = 0.1; //in seconds
theAccelerometer.delegate = self;
タイミングが0.1秒であることに注意してください。そのタイミングを以下のアニメーションに一致させる必要があります。accelerometer:didAccelerate:
次に、デリゲート呼び出しでアニメーションを設定します。
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
NSInteger newX = 0;
newX = imageView.frame.size.width/2 + ((320-imageView.frame.size.width) * (acceleration.x+1)/2.0);
[UIView animateWithDuration:0.1 animations:^{
imageView.center = CGPointMake(newX, imageView.center.y);
}] ;
}
次の更新が完了する前にアニメーションを完了するようにupdateInterval
、アニメーションの長さをのと一致させることが重要です。UIAccelerometer
ここで重要なのは、おそらくnewX
位置を決定するための数学です。基本的に画像の幅の半分を取りました。これが左端の絶対位置だからです。そこから、320-imageView.frame.size.width
追加できる余裕があることがわかりました。全体を足すと、320-imageView.frame.size.width
一番320-imageView.frame.size.width/2
右の位置になります。そこから、320-imageView.frame.size.width
加速した量に応じてチャンクを分割する必要がありました。データは-1から1のaccelerator.x
範囲にあるので、私の範囲全体は2です。そこで、に1を追加して、0から2accelerator.x
に正規化しました。次に、2.0で割って、0から1の範囲になるようにしました。今、私は自分の掛け算ができる乗数を持っていました320-imageView.frame.size.width
範囲。もしそれが0だったら、私は一番左の位置にいるでしょう。1の場合、私は右端の位置にあり、その間のすべてが線形に分割されます。したがって、最終的な用語は次のとおりです。
imageView.frame.size.width/2 + ((320-imageView.frame.size.width) * (acceleration.x+1)/2.0);
画像の新しいx位置を取得します。
それがあなたが探しているものであることを願っています!私はそれをデバイスでテストしました、そしてあなたがあなたの期間を一致させる限りそれはかなりスムーズです。