ねえ、私はこれについてすでにいくつかの投稿があることを知っています-それでも私は私が抱えている問題に対する適切な答えを見つけることができません。
ココアとiOSを初めて使用する私は、最初のiOSゲームを開発中です。このゲームでは、ユーザーのスワイプの速度を計算できるようにしたいと思います。スワイプモーションで連続するタッチ間の距離を見つけるのに問題はありませんが、タッチ間の経過時間を判断するのに問題があります
私は現在のタッチで
touchesMoved:
計算を行い、最後に以前に記録されたタッチをUITouchとして追跡しますここでスワイプの速度を計算し
touchesEnded:
たいのですが、次のようなことをすると次のようになります。double timeDelay = event.timestamp --self.previousTouch.timestamp;
これは常に0を返します。
ただし、gccを使用すると、2つのタイムスタンプが実際には同じではないことがわかります。さらに、調べてみると、これらのイベントのNSTimeInterval値は〜10 ^(-300)の大きさであることがわかりました。NSTimeIntervalはシステムの起動から数秒を報告することになっているので、これは奇妙に思えますね。
また、前のタッチのNSDateを追跡し、[NSDatetimeIntervalSinceNow]と組み合わせて使用してみました。これにより、さらに奇妙な結果が得られ、毎回約6の値が返されました。繰り返しますが、timerIntervalSinceNowはを返すためNSTimeInterval
、この値は非常に奇妙です。
タイムスタンプについて何がわかりませんか?イベント?これに関する助けをいただければ幸いです。御時間ありがとうございます
いくつかのサポートコード:
sampleController.hの場合:
@property(nonatomic) UITouch* previousTouch
@property(nonatomic) UITouch* currentTouch
sampleController.mの場合:
@synthesize previousTouch = _previousTouch, currentTouch = _currentTouch;
...
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
self.currentTouch = [[event allTouches] anyObject];
// do stuff with currentTouch
}
...
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
self.previousTouch = self.currentTouch;
self.currentTouch = [[event allTouches] anyObject];
// do stuff with currentTouch
}
...
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
float distanceMoved = [self.touch locationInView:self.playView].x -
[self.touch previousLocationInView:self.playView].x;
// attempt 1
double timeElapsed = self.currentTouch.timestamp - self.previousTouch.timestamp;
// attempt 2
double timeElapsed = event.timestamp - self.previousTouch.timestamp;
// do stuff with distanceMoved and timeDelay
}