0

したがって、私は Objective-C に比較的慣れていないため、かなり明らかな何かが欠けている可能性が明確にあるので、そうであれば、気軽にトマトを投げてください。これが私の問題です:

1 つの で構成される iPhone シングルビュー アプリケーションがありますMapViewMapViewピンに注釈を付けたりドロップしたりするために、長押しジェスチャ認識機能を含めました。これは、指定しなければうまくいくようminimumPressDurationです...

- (void)viewWillAppear:(BOOL)animated {
    UILongPressGestureRecognizer * longPressRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPress:)];
    [mapView addGestureRecognizer:longPressRecognizer];  // Actual map view handler is added to

    ...

}

-(void) handleLongPress:(UILongPressGestureRecognizer *)gestureRecognizer {
    NSLog (@"Did it work?!");
    // Some code here to make pins appear; omitted for simplicity in this question
}

予想どおり、マップを長押しすると、0.5数秒後 (デフォルトの時間) にマップ上に 1 つのピンが表示されます。指の周りを動かすと、ピンがたくさんあります。ログには「うまくいきましたか?!」も出力されます。何度も何度も。繰り返しますが、予想されます。ただし、viewWillappear メソッドに小さな行を 1 行追加すると (メッセージ mapView の直前addGestureRecognizer):

longPressRecognizer.minimumPressDuration = 1.0;

...ジェスチャーが機能しなくなりました。1秒間押し続けても、ログには何も表示されません。放して、1 秒以上試してみてください... 何もありません。ピンはドロップされず、ログには何も出力されません。なぜこれが起こっているのですか?最小期間を設定するとこれが壊れる理由がわかりません。私の期待は、これが以前と同じように機能することです-カスタム設定された最小プレス時間はありません-唯一の違いは、1秒の半分ではなく1秒押す必要があることです.

更新: との間の値を選択すると、0.1機能するよう0.5です。しかし、一度以上に行くとうまくいき0.6ません。私が知らない Obj-C のフードの下で何かが起こっていますか?

また、ハンドラー関数で状態をチェックする必要があることもわかっているので、それで問題が解決しない限り、私に負担をかけないでください。詳細を掘り下げる前に、基本的な機能を最初に動作させたいだけです。

ありがとう!

PS、OS X 10.8.2 および Xcode 4.5.1 (4G1004) を使用。

4

1 に答える 1

3

同じ問題が発生しました。Recognizer のデリゲートを設定し、同時認識をオンにすると、この問題は解決されます。以下は、参照用の私のコードです。

- (void)init
{
    UILongPressGestureRecognizer *longPressGestureRecognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(lockLongPress:)];
    longPressGestureRecognizer.minimumPressDuration = 1.0;
    longPressGestureRecognizer.delegate = self; 
    [targetView addGestureRecognizer:longPressGestureRecognizer];
}

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}
于 2013-04-06T13:54:15.600 に答える