web-dev-qa-db-ja.com

カスタムピン画像によるMKA注釈画像オフセット

カスタムピンイメージのMKA注釈があります。ただし、pin(MKAnnotationView)は、指定された座標に関して画像を中央に配置します。中心ではなく、画像の中央下に座標のポイントを設定したい。

annView.centerOffset = CGPointMake(-12, -28);を使用してみました。しかし、問題はcenterOffsetがマップのズームレベルに関連していないことです。

JS APIとAndroidの両方でこれを行うことができます。 Objective-Cでこれを行う可能性はありますか?

..fredrik

49
fredrik

UIAnnotationViewは常に同じ縮尺で描画され、マップのズームレベルは関係ありません。 centerOffsetがズームレベルにバインドされないのはそのためです。

annView.centerOffsetは必要なものです。ピンが適切な場所にない場合(たとえば、ズームレベルを変更すると下部中央が少し移動する)、それは正しいcenterOffsetを設定しなかったためです。

ちなみに、画像の下部中央に座標のポイントを設定したい場合、デフォルトでannotationViewが画像を中央に配置するため、centerOffsetのx座標は0.0fになります。だから試してください:

annView.centerOffset = CGPointMake(0, -imageHeight / 2);
135
Zoleas

CenterOffsetを設定すると、ユーザーがマップを回転またはズームするときに画像の周囲が移動することがよくあります。アンカーポイントは、画像の下中央ではなく画像の中央に設定されたままです。

次のように、注釈のアンカーポイントをカスタム画像の中央下に設定できます。

yourAnnotation.layer.anchorPoint = CGPointMake(0.5f, 1.0f);

これにより、ユーザーが地図をズームまたは回転したときに、カスタムアノテーションが地図上の座標から移動することはありません。

44
Pancho

このガイドを使用して、中心オフセットを把握できます。

MKAnnotationView centerOffset guide

17
richy

ズームアウトすると、指定されたすべてのソリューションがピンを台無しにします。私がこれまで見つけた唯一の完全に機能する解決策は、カスタム画像の高さを高くすることです。つまり、高さを2倍にします。また、ピン画像を上部に移動し、残りを透明のままにします。これにより、画像の中心が押しピンの最下部になります。

これで、どれだけズームしても、マップを回転しても、ピンは目的の場所の中心にとどまります。

私が考えることができる1つの問題は、このピンのタップ可能な領域も同様に増加することです。

これがお役に立てば幸いです!

1
dizza213