最近项目须要作到这个功能,写篇博客,只是自我总结,没有时间写demo,先上效果图:bash
先说思路,咱们的项目是一秒走一个经纬度及画一条线段,可前进后退,先用定时器重复执行一个方法,方法就处理小点前进的动画,绘制路线我是每次清空,从新绘制的,设置一个全局变量,记录下当下小点移动到哪一个位置,此次好进行前进后退的处理,思路其实很简单的app
#pragma mark---------划线代理回调----------
- (BMKOverlayView*)mapView:(BMKMapView *)map viewForOverlay:(id<BMKOverlay>)overlay
{
if ([overlay isKindOfClass:[BMKPolyline class]]) {
BMKPolylineView* polylineView = [[BMKPolylineView alloc] initWithOverlay:overlay];
polylineView.fillColor = [[UIColor cyanColor] colorWithAlphaComponent:1];
polylineView.strokeColor = [[UIColor blueColor] colorWithAlphaComponent:0.7];
polylineView.lineWidth = 2.0f;
return polylineView;
}
return nil;
}
复制代码
BMKPointAnnotation * antion = [[BMKPointAnnotation alloc]init];
antion.title = @"";
antion.coordinate = _coors[_index-1];
[_mapView addAnnotation:antion];
//重复再添加一次起点和终点
KJBHomeHistoricalTrackAnnotation * Annotation = [[KJBHomeHistoricalTrackAnnotation alloc]init];
Annotation.type =0;
Annotation.coordinate = _coors[0];
[_mapView addAnnotation:Annotation];
Annotation = [[KJBHomeHistoricalTrackAnnotation alloc] init];
Annotation.type = 1;
Annotation.coordinate = _coors[Max];
[_mapView addAnnotation:Annotation];
//轨迹绘制
BMKPolyline * polyline = [BMKPolyline polylineWithCoordinates:_coors count:_index];
[_mapView addOverlay:polyline];
复制代码
// 根据polyline设置地图范围
- (void)mapViewFitPolyLine:(BMKPolyline *) polyLine {
CGFloat ltX, ltY, rbX, rbY;
if (polyLine.pointCount < 1) {
return;
}
BMKMapPoint pt = polyLine.points[0];
ltX = pt.x; ltY = pt.y;
rbX = pt.x; rbY = pt.y;
for (int i = 1; i < polyLine.pointCount; i++) {
BMKMapPoint pt = polyLine.points[i];
if (pt.x < ltX) {
ltX = pt.x;
}
if (pt.x > rbX) {
rbX = pt.x;
}
if (pt.y > ltY) {
ltY = pt.y;
}
if (pt.y < rbY) {
rbY = pt.y;
}
}
BMKMapRect rect;
rect.origin = BMKMapPointMake(ltX , ltY);
rect.size = BMKMapSizeMake(rbX - ltX, rbY - ltY);
[_mapView setVisibleMapRect:rect];
}复制代码
到这里,代码就结束了,在viewWillDisappear中别忘了设置_mapView.delegate为nil,动画
定时器也要及时释放调ui