我正在使用ios地图。在这里,当我使用覆盖层在ios地图上绘制一条线时,它显示多行。现在我想只绘制一条直线。我怎样才能做到这一点。 下面我用屏幕截图附上了代码。
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([touches count]>1)
{
[super touchesBegan:touches withEvent:event];
return;
}
UITouch *touch = [touches anyObject];
tappedPoint1 = [touch locationInView:_mapView];
// _startCoord = [_mapView convertPoint:tappedPoint1 toCoordinateFromView:_mapView];
coord1= [_mapView convertPoint:tappedPoint1 toCoordinateFromView:_mapView];
polyline = nil;
}
- (void)updatePolylineWithCoordinate:(CLLocationCoordinate2D)coord6
{
if (!_polyline)
{
MKMapPoint points[2];
points[0] = MKMapPointForCoordinate(coord1);
points[1] = MKMapPointForCoordinate(coord6);
line2 = [MKPolyline polylineWithPoints:points count:2];
}
else
{
NSUInteger count = _polyline.pointCount + 1;
// create new point array and add new coord
CLLocationCoordinate2D coords[count];
[_polyline getCoordinates:coords range:NSMakeRange(0, count-1)];
coords[count - 1] = coord6;
[_mapView removeOverlay:_polyline];
line2 = [MKPolyline polylineWithCoordinates:coords count:count];
}
line2.title = @"line";
[_mapView addOverlay: line2];
// _polyline = line2;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:_mapView];
CLLocationCoordinate2D coord5= [_mapView convertPoint:currentPoint toCoordinateFromView:_mapView];
NSLog(@"_startCoord.latitude : %f", coord5.latitude);
NSLog(@"_startCoord.lontitude : %f", coord5.longitude);
[self updatePolylineWithCoordinate:coord5];
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolyline class]])
{
lineview=[[[MKPolylineView alloc] initWithOverlay:overlay] autorelease];
lineview.strokeColor=[[UIColor blueColor] colorWithAlphaComponent:0.5];
lineview.fillColor = [[UIColor redColor]colorWithAlphaComponent:0.5];
lineview.lineWidth=2.0;
return [lineview autorelease];
}
return nil;
}
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
[_mapView removeOverlay:line2];
MKMapPoint points[2];
points[0] = MKMapPointForCoordinate(coord1);
points[1] = MKMapPointForCoordinate(coord5);
line2 = [MKPolyline polylineWithPoints:points count:2];
[_mapView addOverlay: line2];
}
现在,当我使用触摸移动绘制一条线时,它依赖于ios贴图在地图上的任何地方绘制。但我需要当用户移动他的手指时只会显示一条直线。我该怎么做:请看这个屏幕截图。
答案 0 :(得分:1)
试试这个:
- (void)updatePolylineWithCoordinate:(CLLocationCoordinate2D)coord
{
MKPolyline* line;
if (!_polyline) {
MKMapPoint points[2];
points[0] = MKMapPointForCoordinate(_startCoord);
points[1] = MKMapPointForCoordinate(coord);
line = [MKPolyline polylineWithPoints:points count:2];
} else {
NSUInteger count = _polyline.pointCount + 1;
// create new point array and add new coord
CLLocationCoordinate2D coords[count];
[_polyline getCoordinates:coords range:NSMakeRange(0, count-1)];
coords[count - 1] = coord;
[_mapView removeOverlay:_polyline];
line = [MKPolyline polylineWithCoordinates:coords count:count];
}
line.title = @"line";
[_mapView addOverlay: line];
_polyline = line;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if ([touches count]>1) {
[super touchesBegan:touches withEvent:event];
return;
}
UITouch *touch = [touches anyObject];
CGPoint tappedPoint1 = [touch locationInView:_mapView];
_startCoord = [_mapView convertPoint:tappedPoint1 toCoordinateFromView:_mapView];
DDAnnotation *annotation = [[[DDAnnotation alloc] initWithCoordinate:theCoordinate addressDictionary:nil] autorelease];
annotation.subtitle = [NSString stringWithFormat:@"%f,%f", annotation.coordinate.latitude, annotation.coordinate.longitude];
[_mapView addAnnotation:annotation];
_polyline = nil;
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentPoint = [touch locationInView:_mapView];
CLLocationCoordinate2D coord= [_mapView convertPoint:currentPoint toCoordinateFromView:_mapView];
[self updatePolylineWithCoordinate:coord];
}
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
if ([overlay isKindOfClass:[MKPolyline class]])
{
MKPolylineView* lineview= [[MKPolylineView alloc] initWithOverlay:overlay];
lineview.strokeColor=[[UIColor blueColor] colorWithAlphaComponent:0.5];
lineview.fillColor = [[UIColor redColor]colorWithAlphaComponent:0.5];
lineview.lineWidth=2.0;
return [lineview autorelease];
}
return nil;
}
您只需要添加2个实例变量: