0

ドライバーの位置を 10 秒ごとにフェッチするスレッドを実行していて、追加されたマーカーをマップから削除したいのですが、うまくいきません。

私のコード:

-(void)APiResponse:(id)returnJson
{        
        [googleMapsDriverPin setMap:nil];
        googleMapsDriverPin = nil;

        NSMutableArray *driverPins = [[NSMutableArray alloc]init];
        for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) {
            CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]];
            [driverPins addObject:driverLocations];
        }

        for (CLLocation *newLocation in driverPins) {
            googleMapsDriverPin = [[GMSMarker alloc] init];
            [googleMapsDriverPin setPosition:newLocation.coordinate];
            [googleMapsDriverPin setAnimated:YES];
            [googleMapsDriverPin setTitle:@"title"];
            [googleMapsDriverPin setSnippet:@"snippet"];
            [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]];
            [googleMapsDriverPin setMap:googleMaps];
         }
}

10秒ごとに追加して追加し続け、削除しないだけです。助けてください! ありがとう!

4

5 に答える 5

2

ピン ID に基づいて、ピンを削除することもできます。ここで、deletePinId 整数は、選択したピン ID 用です。

for(GMSMarker *pin in self.mapView_.markers) {
NSLog(@"pin.userData : %@",pin.userData);
int pinId1 = [[pin.userData valueForKey:@"pin_id"] integerValue];
if(deltePinId == pinId1 ){
    pin.map = nil;
 }

}

于 2014-01-01T06:17:28.223 に答える
1

現在、1つのマーカーしか保存していませんが、N個のマーカーを追加したいので、(サクソンが言ったように)すべてのピンを保持する配列が必要です:)

@interface YouClass

...

@property(nonatomic, retain) NSMutableArray *googleMapsDriverPins;
@end

@implementation YourClass

...

-(void)APiResponse:(id)returnJson
{    
    for(GMSMarker *pin in self.googleMapsDriverPins) {
        pin.map = nil;
    }    
    self.googleMapsDriverPins = nil;

    NSMutableArray *driverPins = [[NSMutableArray alloc]init];
    for (int x = 0; x < [[returnJson valueForKey:@"drivers"] count]; x++) {
        CLLocation *driverLocations = [[CLLocation alloc]initWithLatitude:[[[[returnJson valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_latitude"] doubleValue] longitude:[[[[detail valueForKey:@"drivers"] objectAtIndex:x] valueForKey:@"driver_longitude"] doubleValue]];
        [driverPins addObject:driverLocations];
    }

    self.googleMapsDriverPins = [NSMutableArray arrayWithCapacity:driverPins.count];
    for (CLLocation *newLocation in driverPins) {
        GMSMarker *googleMapsDriverPin = [[GMSMarker alloc] init];
        [googleMapsDriverPin setPosition:newLocation.coordinate];
        [googleMapsDriverPin setAnimated:YES];
        [googleMapsDriverPin setTitle:@"title"];
        [googleMapsDriverPin setSnippet:@"snippet"];
        [googleMapsDriverPin setIcon:[GMSMarker markerImageWithColor:[UIColor blackColor]]];
        [googleMapsDriverPin setMap:googleMaps];
        [self.googleMapsDriverPins addObject:googleMapsDriverPin];
     }
 }
 @end
于 2013-05-16T10:21:02.093 に答える
0

Swift 2 では:

マップのアウトレットを作成します。

@IBOutlet weak var mapView: GMSMapView!

すべてのマーカーを格納する配列を作成します

var markers = [GMSMarker]()

次のようなマーカーを作成します。

    func funcName() {    
        let position = CLLocationCoordinate2DMake(lat, lon)
        let marker = GMSMarker(position: position)

        for pin: GMSMarker in self.markers {
             if pin.userData as! String == "from" {
                   pin.map = nil
             }
        }

        marker.icon = UIImage(named: "navigation-red")
        marker.userData = "from"
        marker.map = self.mapView
        self.markers.append(marker)
    }

userData プロパティを任意の値に設定し、後でその文字列を使用してそのマーカーを削除できます。funcName 関数が実行されると、userData が「from」であるすべてのマーカーがマップから削除されます。クエリがある場合はお知らせください。 .

于 2016-08-15T09:27:08.307 に答える
0

複数のドライバーを追加するループがあり、それぞれがメンバー変数に割り当てられているようですgoogleMapsDriverPin。次回はgoogleMapsDriverPin- を削除しますが、それは最後に追加したピンのみであり、すべてではありません。

これを機能させるには、ループ内の各マーカーを配列に追加し、次の更新時にマップからすべてを削除する必要があります。

于 2013-05-15T08:36:16.420 に答える