2010-07-22 31 views
8

có cách cập nhật (tức là di chuyển xung quanh) một MKOverlay đã được thêm vào MKMapView. Loại bỏ một cái cũ và thêm một cái mới là khủng khiếp (chậm).di chuyển/cập nhật MKOverlay trên MKMapView

tức là tôi muốn kích hoạt các chức năng nền mà được gọi chức năng này khi một lớp phủ di chuyển trên màn hình:

- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 

(với MKAnnotions của nó tốt hơn một chút tôi nghĩ, nhưng tôi không thể sử dụng MKPolyline, MKPolygon , vv và toàn bộ thông tin được giảm xuống còn một điểm duy nhất)

+0

Ngoài ra: để cung cấp cho bạn ấn tượng khi tôi cần chức năng này: tôi sử dụng một chú thích MapView và đặt chú thích trên đầu trang để hiển thị vị trí của vệ tinh. Mỗi vệ tinh cũng sẽ hiển thị một dấu chân (khu vực nơi bạn có thể "nhìn thấy" vệ tinh phía trên đường chân trời). Thông tin này (vị trí và hình dạng của dấu chân) phải được cập nhật định kỳ. Trong Moment i có một giải pháp với một View vor tất cả Footprints nơi tôi vẽ với CoreGraphics đúng hình dạng. Nhưng tôi muốn một giải pháp với MKOverlay, nhưng tôi không thể có được chúng năng động ... bất kỳ ý tưởng? – user398877

Trả lời

4

MKOverlayView có các phương pháp sau đó buộc MapKit lại làm cho mapRect đưa ra:

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect

- (void)setNeedsDisplayInMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale

Nếu bạn đang sử dụng một bộ đếm thời gian (hoặc yêu cầu HTTP kỳ hoặc một số loại phương pháp khác để xác định rằng lớp phủ của bạn cần được cập nhật), gọi một trong những phương pháp trên vào overlayView sẽ gây ra nó sẽ tái hiện lại vị trí đó trên bản đồ (tức là -canDrawMapRect:zoomScale: sẽ được gọi lại, và sau đó -drawMapRect:zoomScale:inContext: sẽ được gọi nếu trả trước CÓ).


Cập nhật:

Nếu bạn không chắc chắn những gì bạn mapRect cần phải làm, bạn có thể có thể sử dụng các MKMapRectWorld liên tục như mapRect - mà tôi tin rằng sẽ làm cho lớp phủ trên toàn bộ bản đồ để tải lại (một lần hiển thị).

+1

Dường như với tôi như ... như của iOS 7, các phương pháp này là trên 'MKOverlayRenderer', không phải' MKOverlayView'. – livingtech

+0

Nếu bạn muốn cập nhật toàn bộ bản đồ, bạn chỉ có thể gọi 'setNeedsDisplay ' – gcamp

0

Tôi thực sự buộc phải xem lớp phủ để làm mất hiệu lực đường dẫn, để xóa đường dẫn cũ trước khi thiết lập đường dẫn mới. [polygonView invalidatePath]. Nói với chế độ xem bản đồ mà nó cần làm mới hiển thị là không đủ cho tôi.

1

Sử dụng MKAnnotations. Bạn có thể thay đổi tọa độ của chúng. Chỉ cần tắt mọi nội dung liên quan đến cảm ứng. Bạn sẽ cần mã vẽ của riêng bạn để vẽ các chú thích, OpenGL có thể sẽ làm điều đó. Không ai biết được sự khác biệt.

+3

Chú thích AnnotationView vẫn giữ nguyên kích thước nếu bạn phóng to, kích thước lớp phủ có liên quan đến quy mô thu phóng không?Tôi cần phải chỉ định một vòng tròn trên bản đồ sẽ đánh dấu một khu vực cụ thể (có thể là công viên hoặc một cái gì đó). – yuf

0

Điều này dường như buộc bản đồ phải làm mới lớp phủ. Có lẽ là chú thích.

[self.mapView setCenterCoordinate: self.mapView.centerCoordinate];

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