1

このメソッドを使用して、オブジェクトをビュー内で移動しています。

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event

この方法では、次のように書きました。

NSLog(@"event: %@", event);

この結果を取得します。

event: <UITouchesEvent: 0x310d00> timestamp: 5277.16 touches: {(
    <UITouch: 0x3f1110> phase: Moved tap count: 1 window: <UIWindow: 0x3117d0; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x30cb20>> view: <UIView: 0x330520; frame = (0 0; 768 1024); transform = [0, -1, 1, 0, 0, 0]; autoresize = W+H; layer = <CALayer: 0x330550>> location in window: {279, 677} previous location in window: {305, 694} location in view: {347, 279} previous location in view: {330, 305},
    <UITouch: 0x4a1a710> phase: Stationary tap count: 1 window: <UIWindow: 0x3117d0; frame = (0 0; 768 1024); layer = <UIWindowLayer: 0x30cb20>> view: (null) location in window: {412, 89} previous location in window: {413, 89} location in view: {412, 89} previous location in view: {413, 89}
)}

このログでは、すべてのタッチを確認できます (今のところ、これは 2 回のタッチです)。

私の質問は、タッチする方法ですか?

これは私のオブジェクトを移動する必要があります。

今私はこれを使用しています:

UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.view];

しかし、オブジェクトを動かすと、タッチのすべての値が取得されます。最初のタッチだけを処理する方法は?

どうもありがとう!

4

2 に答える 2

4

やり方に問題はありませんが、本当に知りたい場合は、最初のオブジェクトを取得する方法を説明します。

パラメータタッチはNSSetタイプです。NSSetクラスリファレンスを見ると、メソッドも見つかります - (NSArray *)allObjects

したがって、次の方法でファーストタッチを取得できます。

UITouch *touch = (UITouch *)[[[event allTouches] allObjects] objectAtIndex: 0];

UIEventクラスリファレンスもご覧ください。ここで、allTouchesが唯一の方法ではないことがわかります。クラスは戻る方法も知っています:

- (NSSet *)touchesForGestureRecognizer:(UIGestureRecognizer *)gesture

- (NSSet *)touchesForView:(UIView *)view

- (NSSet *)touchesForWindow:(UIWindow *)window

このメソッドはすべて、を返しますNSSet。のメソッドを使用して変換できます。NSArrayNSSetallObjects

于 2012-05-25T15:15:58.700 に答える
3

ビューのドラッグにタッチ イベントを使用している場合は、UIPanGestureRecognizer を使用できます。

認識機能には、タッチの最小/最大数などのプロパティがあり、ビューをドラッグするために Apple によって作成されました。

UIPanGestureRecognizer クラス リファレンス

于 2012-05-25T14:21:14.550 に答える