2

iOSマップで作業しています。ここで、オーバーレイを使用して iOS マップに線を引くと、複数の線が表示されます。今、私は1本の直線だけを描きたいです。これどうやってするの。以下に、スクリーンショット付きのコードを添付しました。

    - (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マップに応じてマップ上のどこにでも線が描画されます。しかし、ユーザーが指を動かすと、1本の直線だけが表示される必要があります。これを行うにはどうすればよいですか: このスクリーン ショットを参照してください。ここに画像の説明を入力

この問題を解決するために私を助けてください。

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 に答える