私は問題を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つでアクションを実行する必要があることを意味します。ただし、このオプションは適切に聞こえません。