1

私は問題をlocationInViewであると追跡しました:UITapGestureRecognizerで、常に縦向きで(0、-67)、横向きで(0,268)のCGPointを与えてくれます。(UITapGestureRecognizerとしてキャストしないと、時々(0,180)が横向きになります。

この問題はiOS5シミュレータには存在しません。これはiOS6シミュレーターで頻繁に発生し、iOS 6デバイスではほぼ90%の確率で発生します。

私の推測では、ジェスチャレコグナイザーは、アクションメソッドを呼び出すまでには無効になっていますが、デリゲートメソッドで常にlocationInView:を呼び出す必要があるため、意味がありません。

詳細:

私がやろうとしていること: MKMapViewでタップジェスチャを認識し、そのポイントを隠して調整し、注釈として表示します

私がしたこと: ジェスチャレコグナイザーのアクションメソッドで。

CLLocationCoordinate2D coordinate = [self.mapView convertPoint:[(UITapGestureRecognizer *)sender locationInView:self.mapView] toCoordinateFromView:self.mapView];

送信者が実際にUITapGestureRecognizerであることを確認するためにイントロスペクションを行いました。

私も戻っYESてみまし(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizerたが、それは役に立ちません。

何が起こるか: 座標は、マップ上でタップされたポイントに対応している必要があります。

何が起こった のか:座標は常に少し左に離れています。

アップデート:

だから..私はのすべてのデリゲートメソッドでテストしました<UIGestureRecognizerDelegate>。上記のアクションメソッドと– gestureRecognizer:shouldReceiveTouch:ジェスチャレコグナイザの両方で、locationInView:に無効な位置(0、-64)が与えられます。(上記のように0、-67でしたが、数分前にXcodeを最新バージョンに更新した後は0、-64になります、笑)しかし、で– gestureRecognizerShouldBegin:– gestureRecognizer:shouldRecognizeSimultaneouslyWithGestureRecognizer:それは正しいCGPointを与えます。

私の質問は..これは意図された動作ですか?それとも私は何かを台無しにしましたか?それ以外の場合は、ジェスチャレコグナイザーの正しい位置が必要なので、デリゲートメソッドの1つでアクションを実行する必要があることを意味します。ただし、このオプションは適切に聞こえません。

4

1 に答える 1

2

ご迷惑をおかけして申し訳ありませんが、原因を突き止めました。

UIGestureRecognizerはUIのものであり、iOSのルール#1は「UIのものはメインスレッドにのみ属する」であるため、私は単にaを残しlocationInView:ました。これは明らかです。これは、の一貫性のない動作と、それが初期段階で成功する可能性が高い理由をすぐに説明します。performBlock:NSManagedObjectContextlocationInView:

もう一度学んだ教訓:「ジェスチャレコグナイザー」をとして読んでくださいUIGestureRecognizer「UI」

于 2013-01-29T17:14:25.247 に答える