2

我在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 地图。但我需要当用户移动他的手指时,只会显示一条直线。我该怎么做:请看这个屏幕截图。在此处输入图像描述

任何人都可以帮我解决这个问题。

4

1 回答 1

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 个实例变量:

  • CLLocationCoordinate2D _startCoord;
  • MKPolyline* _polyline;
于 2013-03-18T11:24:07.663 回答