12

組み込みのコールアウトが非常に限られているため、以前にMKAnnotationViewのサブビューとしてカスタムコールアウトバブルを作成しました。これには、コールアウトバブルのサイズを考慮して選択されたときにMKAnnotationViewのcenterOffsetに変更する必要があります。これはすべて、iOS4がリリースされる前は完全に機能していました。現在、iOS 4では、centerOffsetプロパティの更新が完全に無視されるため、ピンとバブルが右下にジャンプしているように見えます(コールアウトバブルの左上隅は、ピンポイントがあるべき場所にあります) 。

iOS 4でこれが変更された理由を誰かが知っていますか?MKMapViewに新しいcenterOffsetを認識させるためにできることはありますか?これはアップルが導入したバグですか?

助けてくれてありがとう!

4

3 に答える 3

4

私は同じ問題を抱えています - centerOffset は初めて考慮されるようです。内部で変更されますが、ビューは移動されません。そのため、自分でビューを移動する必要があります。

必要なオフセットで中心を調整することにより、ビューを移動できます。選択したビューは、選択されていないビューの左上隅に配置されたままになるため、それらの中心を再調整する必要があります。これが私のケースです:

選択 -> 選択解除:

self.center = CGPointMake(self.center.x + 56.0, self.center.y + 130.0);
self.centerOffset = CGPointMake(5.0, -14.0);

未選択 -> 選択済み:

self.center = CGPointMake(self.center.x - 56.0, self.center.y - 130.0);
self.centerOffset = CGPointMake(64.0, -81.0);

ここで、130 はビュー間の高さの差 (中心点が下部)、56 はそれらの中心の X オフセットの差です。

覚えておいてください-ズーム時に考慮されるため、中心オフセットを変更する必要があります。

これが役に立てば幸いです。これで数時間を失いました。バグ レポートを Apple に送信することを忘れないでください。

于 2011-03-29T12:24:35.913 に答える
0

代わりに、すべてのバージョンで正常に動作するものcenterOffsetを使用できると思います。setRegion

CGPoint point = [mapView convertCoordinate:selectedAnnotation.coordinate toPointToView:self.view];

CGRect frame = [customView frame];
frame.origin.y = point.y - frame.size.height;
frame.origin.x = point.x - frame.size.width / 2;

MKCoordinateRegion region = [mapView convertRect:frame toRegionFromView:self.view];
[mapView setRegion:region animated:YES];
于 2011-02-28T12:55:55.900 に答える