Tôi đang sử dụng MKDirectionsRequest để tìm MKRoute giữa hai điểm. Câu trả lời sẽ được hiển thị trên MKMapView sử dụng mã này:Hiển thị MKRoute trên MKMapView trong iOS7
MKDirections *directions = [[MKDirections alloc] initWithRequest:request];
[directions calculateDirectionsWithCompletionHandler:^(MKDirectionsResponse *response, NSError *error)
{
if (error)
{
NSLog(@"Error : %@", error);
}
else
{
[_mapView removeOverlays:_mapView.overlays];
for (MKRoute *route in response.routes)
{
[_mapView insertOverlay:route.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
}
}
}];
Câu hỏi của tôi là, nếu có một cách thích hợp để cập nhật các MKRoute nếu người dùng đang di chuyển. Atm Tôi đang sử dụng
- (void)mapView:(MKMapView *)aMapView didUpdateUserLocation:(MKUserLocation *)aUserLocation
để nhận dạng chuyển động và cách tính này tôi đang loại bỏ lớp phủ MKRoute và tính toán và thêm mới với vị trí người dùng mới. Tôi tự hỏi liệu có cách tính toán tuyến đường chỉ một lần và cập nhật lớp phủ theo chương trình không?
Chỉnh sửa: Tôi tìm thấy điều này https://developer.apple.com/library/ios/documentation/MapKit/Reference/MKRouteStep_class/Reference/Reference.html#//apple_ref/occ/cl/MKRouteStep trong Apple Dev Docs. Tôi đoán tôi phải làm một cái gì đó giống như
for (MKRoute *route in response.routes)
{
for (MKRouteStep *step in route.steps)
{
[_mapView insertOverlay:step.polyline atIndex:0 level:MKOverlayLevelAboveRoads];
}
}
nhưng làm thế nào tôi có thể nhận ra các bước thực hiện đằng sau vị trí người sử dụng thực tế?
Chỉnh sửa: Một tùy chọn khác có thể là sử dụng bộ hẹn giờ kích hoạt sự kiện (loại bỏ lớp phủ cũ và thêm lớp phủ mới). Bạn nghĩ sao?
[NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(addRouteOverlay) userInfo:nil repeats:YES];
Tôi không khuyên bạn nên hẹn giờ vì sau đó bạn có thể không cần cập nhật lộ trình ngay cả khi người dùng chưa di chuyển. Tùy chọn đơn giản nhất là làm điều đó trong didUpdateUserLocation nhưng chỉ khi người dùng đã di chuyển X mét kể từ khi tuyến đường cuối cùng được vẽ. Không liên quan nhưng nếu bạn thêm thẻ "iOS" đơn giản vào câu hỏi, thẻ có thể thu hút sự chú ý nhiều hơn (cũng như làm nổi bật cú pháp mã đúng cách). – Anna
Tôi đã thực hiện một số điều như thế này trước đây, nhưng không chắc chắn lý do tại sao bạn muốn tạo bản đồ tuyến đường chỉ khi người dùng đang di chuyển. Bạn có thể tạo lộ trình với MKPolyLine trên bản đồ lần đầu tiên giữa điểm bắt đầu và điểm kết thúc.Sau đó nếu người dùng di chuyển, bạn có thể hiển thị vị trí được cập nhật của người dùng trên bản đồ với Biểu tượng Vị trí Hiện tại mặc định (Vòng tròn Nhỏ màu xanh lam). Vui lòng làm rõ để tôi có thể đề xuất điều gì đó, –
Vị trí của người dùng được hiển thị chính xác. ví dụ. đối với tuyến đường từ A-> B-> C, vị trí của người dùng là A và tuyến đường được hiển thị chính xác nhưng khi người dùng chuyển sang B, tuyến đường vẫn được hiển thị từ A-> C không phải từ B-> C. – matthias