Как периодически обновлять Mapview? - PullRequest
0 голосов
/ 17 октября 2011

В моем приложении я хочу периодически обновлять MapView и перерисовывать путь на карте в соответствии с новым местоположением.Возможно ли использовать MKMapView?

Это мой метод doload для рисования и аннотации при просмотре карты.

- (void)viewDidLoad
 {

NSString *url=[NSString stringWithFormat:@"xxxxx.php?uid=%@&buddy_uid=%@",UserUID,buddyUid];
NSLog(@"%@",url);
NSLog(@"%@",url);
NSString * jsonString = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:url] encoding:NSUTF8StringEncoding error:nil];
NSLog(@"return data %@",jsonString);
NSDictionary *jsonDic = [jsonString JSONValue];
buddyLocation = [[NSString alloc] initWithFormat:@"%@,%@",[jsonDic objectForKey:@"Lattitude"],[jsonDic objectForKey:@"Longitude"]];

[super viewDidLoad];

locmanager = [[CLLocationManager alloc] init]; 
[locmanager setDelegate:self]; 
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];
//[locmanager startUpdatingLocation];
MKMapView *mapnew;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
{
    mapnew = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 768, 1004)];
}
else
{
    mapnew = [[MKMapView alloc] initWithFrame:CGRectMake(0, 0, 320, 460)];
}

[mapnew setDelegate:self];
[self.view addSubview:mapnew];

MKCoordinateRegion region = { {0.0, 0.0 }, { 0.0, 0.0 } }; 
region.center.latitude = lat1 floatValue];//22.56574;
region.center.longitude =lng1 floatValue];//73.74575;
NSString *currentLocation = [[NSString alloc] initWithFormat:@"%@,%@",lat1,lng1];
NSLog(@"%@",currentLocation);

DisplayMap *ann = [[DisplayMap alloc] init]; 
ann.title = @"Current Location";
ann.coordinate = region.center; 
[mapnew addAnnotation:ann];

NSLog(@"%@",jsonDic);
region.center.latitude = [[jsonDic objectForKey:@"Lattitude"] floatValue];//23.56574;
region.center.longitude = [[jsonDic objectForKey:@"Longitude"] floatValue];//72.74575;

ann = [[DisplayMap alloc] init]; 
ann.title = @"Buddy Location";
ann.coordinate = region.center; 

    [mapnew addAnnotation:ann];
    KMLParser *kml = [KMLParser parseKMLAtURL:[NSURL URLWithString:[NSString 
    stringWithFormat:@"https://maps.google.com/maps?saddr=%@&daddr=%@&
    output=kml",currentLocation,buddyLocation]]]; 
    NSArray *overlays = [kml overlays];
    [mapnew addOverlays:overlays];

    MKMapRect flyTo = MKMapRectNull;
    for (id <MKOverlay> overlay in overlays) 
    {
        if (MKMapRectIsNull(flyTo)) 
        {
            flyTo = [overlay boundingMapRect];
        }
        else 
        {
            flyTo = MKMapRectUnion(flyTo, [overlay boundingMapRect]);
        }
    }

    mapnew.visibleMapRect = flyTo;
    [mapnew release];
    mapnew =nil;
}

 }
 -(MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay 
 {        
MKPolylineView *line = [[[MKPolylineView alloc] initWithPolyline:overlay] autorelease]; 
line.strokeColor = [UIColor blueColor]; 
line.lineWidth =2.0;
return line;
 }

1 Ответ

0 голосов
/ 17 октября 2011

Метод ViewDidiLoad вызывается только один раз при загрузке представления. После этого он дает управление только таким методам, как viewWillappear и т. Д. При последующих посещениях. То, что вам нужно сделать, это отделить метод, который анализирует данные о местоположении от viewDidLoad, и заставляет его устанавливать массив или объекты. И вызовите метод для сброса этого содержимого на карте, то есть удалите предыдущие аннотации или наложение, а затем добавьте новые. задача решена. Вы можете вызывать эти методы с фиксированным интервалом, используя таймер или что-то в этом роде. Я думаю, это должно помочь.

...