2010-06-28 29 views
12

Trước đây tôi đã tạo bong bóng chú thích tùy chỉnh làm chế độ xem phụ cho MKAnnotationView vì chú thích được tạo sẵn rất hạn chế. Điều này yêu cầu tôi thay đổi thành centerOffset của MKAnnotationView khi nó được chọn để tính kích thước của bong bóng chú thích. Điều này tất cả đã làm việc hoàn hảo trước khi iOS 4 ra mắt. Bây giờ, với iOS 4, nó hoàn toàn bỏ qua việc cập nhật thuộc tính centerOffset của tôi và do đó pin và bong bóng xuất hiện để nhảy xuống và sang phải (góc trên cùng bên trái của bong bóng chú thích giờ đây là vị trí có điểm pin) .MKMapView bỏ qua cập nhật của centerOffset trong iOS 4

Có ai biết tại sao điều này đã thay đổi trong iOS 4 không? Có cái gì tôi có thể làm để có được MKMapView để nhận ra centerOffset mới? Đây có phải là lỗi mà Apple giới thiệu không?

Cảm ơn sự giúp đỡ!

+0

Chỉ muốn quảng cáo chiêu hàng, gặp phải vấn đề tương tự. Tôi hiện đã điều chỉnh trung tâm chú thích để bù đắp cho thay đổi bù đắp. Đó là xa lý tưởng mặc dù. –

Trả lời

0

Tôi nghĩ thay vì centerOffset bạn có thể sử dụng setRegion hoạt động tốt trong tất cả các phiên bản.

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]; 
+0

Chúng tôi không cố gắng điều chỉnh khu vực bản đồ, nhưng bù đắp trung tâm của chế độ xem chú thích thực tế. –

+0

@Yannick, vâng, nhưng thiết lập khu vực có cùng kích thước nhưng tọa độ trung tâm mới S re sẽ căn giữa lại bản đồ. Tôi muốn nói đây là câu trả lời, có cùng một rắc rối mà bạn đã có. – makdad

+2

Nó không phải là những gì tôi đang cố gắng đạt được. Khu vực bản đồ hiện tại phải giữ nguyên. Tôi muốn chế độ xem chú thích di chuyển theo thuộc tính centerOffset mới của nó. –

4

Tôi gặp vấn đề tương tự - centerOffset dường như chỉ được tính đến trong lần đầu tiên. Nó được thay đổi nội bộ, nhưng quan điểm không được di chuyển - vì vậy những gì bạn cần làm là di chuyển chế độ xem.

Bạn có thể di chuyển chế độ xem bằng cách điều chỉnh tâm của nó bằng độ lệch được yêu cầu - chế độ xem được chọn vẫn được căn chỉnh ở góc trên cùng bên trái với chế độ xem không được chọn, vì vậy bạn cần căn chỉnh lại các trung tâm của chúng. Đây là trường hợp của tôi:

chọn -> Unselected:

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

Unselected -> chọn:

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

đâu 130 là sự khác biệt về chiều cao giữa các quan điểm (trung tâm điểm là ở phía dưới) , và 56 là sự khác biệt giữa X offsets của trung tâm của họ.

Hãy nhớ - bạn vẫn cần phải thay đổi độ lệch trung tâm vì nó sẽ được tính đến khi phóng to.

Hy vọng điều này sẽ giúp ích, tôi đã mất vài giờ về điều này. Hãy nhớ gửi báo cáo lỗi cho Apple.

+0

Cảm ơn, điều này đã giúp tôi! – elsurudo

+0

đã làm việc cho tôi, cảm ơn! –

6

Đảm bảo bạn đang sử dụng MKAnnotationView và không MKPinAnnotationView! Bạn không thể đặt centerOffset của MKPinAnnotationView -object (ngoại trừ nếu bạn là lớp con của khóa học).

Các vấn đề liên quan