1

我開發了一個谷歌地圖,其中我顯示atm的附近用戶位置。我添加了一個活動指示器,以便在應用程序獲取信息時進行動畫製作,並在應用程序獲取時停止。活動指標不會從谷歌地圖視圖中刪除

我寫了下面的代碼來這樣做。我的活動指示器正在顯示,但未被刪除。請幫助我這樣做。

#import "ViewController.h" 
#import <GoogleMaps/GoogleMaps.h> 


@interface ViewController()<GMSMapViewDelegate> 
{ 
    NSUserDefaults *latitudess; 
    NSUserDefaults *longitudess; 
    GMSMapView *mapView_; 
    UIView *viewForSlider; 
    UILabel *labelToShowCurrentRadiusValue; 
    NSMutableData *urldata; 
    NSInteger *j; 
    UIActivityIndicatorView *spinner; 

} 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    mapView_ = [[GMSMapView alloc] init]; 

    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:22.595769 
                  longitude:88.263639 
                   zoom:12]; 


    mapView_ = [GMSMapView mapWithFrame:CGRectMake(0.0, 0.0, self.view.frame.size.width, self.view.frame.size.height) camera:camera]; 
    mapView_.delegate=self; 
    mapView_.settings.myLocationButton = YES; 
    mapView_.myLocationEnabled = YES; 
    [self.view addSubview:mapView_]; 



    GMSMarker *marker = [[GMSMarker alloc] init]; 
    marker.position = CLLocationCoordinate2DMake(22.595769, 88.263639); 
    marker.title = @"Howrah"; 
    marker.snippet = @"Kolkata"; 
    marker.map = mapView_; 



    viewForSlider = [[UIView alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height - 62.0 , self.view.frame.size.width, 62.0)]; 
    viewForSlider.backgroundColor = [UIColor colorWithWhite:0.9 alpha:0.9]; 

    [self.view addSubview:viewForSlider]; 



    labelToShowCurrentRadiusValue =[[UILabel alloc]initWithFrame:CGRectMake(0, 8.0, viewForSlider.frame.size.width, 20.0)]; 
    labelToShowCurrentRadiusValue.backgroundColor=[UIColor clearColor]; 
    [labelToShowCurrentRadiusValue setFont:[UIFont systemFontOfSize:15.0]]; 
    labelToShowCurrentRadiusValue.textAlignment=NSTextAlignmentCenter; 
    labelToShowCurrentRadiusValue.textColor=[UIColor colorWithRed:84.0/255.0 green:84.0/255.0 blue:84.0/255.0 alpha:1.0]; 
    [viewForSlider addSubview:labelToShowCurrentRadiusValue]; 


    [self startUserTracking]; 
    [self displayAtm]; 



spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(135,140,50,50)]; 
    spinner.color = [UIColor blueColor]; 
    [spinner startAnimating]; 
     [self.view addSubview:spinner]; 


} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; 


-(void)startUserTracking 
{ 


    if (mapView_.observationInfo == nil) 
    { 
     [mapView_ addObserver:self 
        forKeyPath:@"myLocation" 
         options:NSKeyValueObservingOptionNew 
         context:NULL]; 


     dispatch_async(dispatch_get_main_queue(), ^{ 
      mapView_.myLocationEnabled = YES; 
     }); 
    } 
} 

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(NSDictionary *)change 
         context:(void *)context 
{ 



    CLLocation *location = [change objectForKey:NSKeyValueChangeNewKey]; 

    mapView_.camera = [GMSCameraPosition cameraWithTarget:location.coordinate 
                zoom:15]; 

    labelToShowCurrentRadiusValue.text = [NSString stringWithFormat:@"%f , %f", location.coordinate.latitude, location.coordinate.longitude]; 
    latitudess=[NSUserDefaults standardUserDefaults]; 
    longitudess=[NSUserDefaults standardUserDefaults]; 
    [latitudess setFloat:location.coordinate.latitude forKey:@"LATITUDE"]; 
    [latitudess setFloat:location.coordinate.longitude forKey:@"LONGITUDE"]; 
    [latitudess synchronize]; 

    @try { 
     [mapView_ removeObserver:self forKeyPath:@"myLocation"]; 
    } @catch(id exception){ 

    } 

} 



-(void)displayAtm 
{ 

    latitudess=[NSUserDefaults standardUserDefaults]; 

    float retrievedlat=[latitudess floatForKey:@"LATITUDE"]; 
    float retrievedlong=[latitudess floatForKey:@"LONGITUDE"]; 
    NSLog(@"detail=%f",retrievedlat); 



    NSString *urlforrequest=[NSString stringWithFormat:@"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=%f,%f&radius=500&types=atm&name=atm&key=*******",retrievedlat,retrievedlong]; 
    NSURL *finalurl=[NSURL URLWithString:urlforrequest]; 



    urldata=[[NSMutableData alloc]initWithContentsOfURL:finalurl]; 
    NSError *error; 
    id jsonresults=[NSJSONSerialization JSONObjectWithData:urldata options:kNilOptions error:&error]; 

    NSArray *datarray= [jsonresults objectForKey:@"results"]; 
    for (int i=0; i<datarray.count; i++) 
    { 
     GMSMarker *marker=[[GMSMarker alloc]init]; 
     NSDictionary *geometryretrieved=[[datarray valueForKey:@"geometry"]objectAtIndex:i]; 
     NSDictionary *coordinatesretrieved=[geometryretrieved valueForKey:@"location"]; 
     marker.position=CLLocationCoordinate2DMake([[coordinatesretrieved objectForKey:@"lat"] doubleValue], [[coordinatesretrieved objectForKey:@"lng"]doubleValue]); 
     marker.title=[[datarray valueForKey:@"name"]objectAtIndex:i]; 
     marker.map=mapView_; 

     [spinner removeFromSuperview]; 


    } 


} 

在此先感謝。

回答

0

在視圖中更改doload在[self displayAtm]中顯示微調器後最後調用此方法;

- (void)viewDidLoad 
{ 
    [self startUserTracking]; 
    // [self displayAtm]; 



spinner = [[UIActivityIndicatorView alloc]initWithFrame:CGRectMake(135,140,50,50)]; 
    spinner.color = [UIColor blueColor]; 
    [spinner startAnimating]; 
     [self.view addSubview:spinner]; 

[self displayAtm]; 

} 
+0

no sir,它沒有刪除指標,它仍然顯示在地圖上。 –

+0

微調不會刪除becz當你微調顯示,然後你沒有在viewdidload中調用displayatm –

+0

我犯了一個錯誤,我沒有設置正確的顏色組合,加載時間非常快,所以它不顯示 –