2012-04-07 32 views
5

Tôi đang viết một ứng dụng iOS 5 theo dõi vị trí của người dùng trong thời gian thực, vẽ đồ thị của họ theo số MKMapView. Bất cứ khi nào đọc GPS được thực hiện, tôi muốn một polyline được vẽ giữa các vị trí hiện tại và cũ, cuối cùng tạo thành một rãnh (hoặc đường dẫn) của nơi người dùng đã đi.Mở rộng MKPolylines hoặc tạo nhiều MKPolylines?

Tôi cảm thấy thoải mái với việc sử dụng MKPolylineMKPolylineView để vẽ một ca khúc, giả định rằng tôi có tất cả các CLLocationCoordinate2D tọa trước, sử dụng mã tương tự như dưới đây:

MKPolyline *route = [MKPolyline polylineWithCoordinates:coordinates count:[self.coordinateArray count]];   
[mapView addOverlay:route]; 

Tuy nhiên, kể từ khi tôi chỉ nhận được CLLocationCoordinate2D tọa độ trong thời gian thực (như phương thức ủy nhiệm locationManager:didUpdateToLocation:fromLocation: được gọi) Tôi không chắc chắn cách tốt nhất để vẽ các polylines mới.

Tôi có thể mở rộng các dòng hiện tại (ví dụ: thêm vào mảng coordinates C-C không có nhiều kinh nghiệm C Tôi không chắc chắn cách thực hiện việc này) hoặc tôi cần tạo một polyline mới giữa hai tọa độ tiếp theo Tôi đã nghe nói rằng có quá nhiều polylines cá nhân trên bản đồ có thể ảnh hưởng đến hiệu năng và cách sử dụng bộ nhớ ...)?

Xin cảm ơn trước.

+1

Bạn đã xem ứng dụng mẫu của Apple [Breadcrumb] (http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html)? – Anna

Trả lời

5

Đầu tiên, xem how to update MKPolyline/MKPolylineView?, đặc biệt là liên kết đến mã mẫu Breadcrumb. Nó có thể là một điểm khởi đầu tốt cho những gì bạn cần.

Tuy nhiên, bạn sẽ thấy rằng một phần quan trọng của đối tượng CrumbPath là một cuộc gọi đến realloc. Vì vậy, có, bạn cần phải biết làm thế nào để quản lý mảng kiểu C nếu bạn muốn lưu trữ hiệu quả mảng của bạn của các điểm. Vâng, điều này là không dễ dàng. Có, thao tác mảng kiểu C là lời mời cho rò rỉ bộ nhớ.

Mẫu Breadcrumb sử dụng realloc để đổi kích thước mảng của nó. Bạn có thể an toàn hơn một chút bằng cách cấp phát bộ nhớ mà mảng sử dụng với loại NSMutableData. Nó được khuyến khích như là một câu trả lời cho Is it ok to use “classic” malloc()/free() in Objective-C/iPhone apps?. Đọc các giải pháp khác để xem các hàm C malloc()free() thường xuyên thực hiện cùng một công việc. Lưu ý rằng NSMutableData có phương thức increaseLengthBy: rất tiện dụng.

Khi bạn hiểu tại sao mọi sinh viên C cố gắng sử dụng sizeof() không chính xác - và cách sử dụng đúng cách - bạn sẽ hiểu được quản lý bộ nhớ C.

+0

Cảm ơn bạn đã trả lời (và chỉ cho tôi hướng tới mã mẫu Breadcrumb!). – Skoota

+1

Liên kết mẫu Breadcrumb bị hỏng. Tôi đã tìm thấy liên kết mới: http://developer.apple.com/library/ios/#samplecode/Breadcrumb/Introduction/Intro.html –

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