2016-05-03 7 views
0

У меня есть два места: один - это драйвер, а другой - наездник. У меня есть lat n long для обоих. Я хочу ударить api, когда водитель входит в зону геофунта места всадников.Как реализовать код геопространства для карты Apple ios 9

Я прошел через демонстрационный проект QKGeofenceManager: , используя это, я могу предоставить lat n long и радиус для поиска geofence.

Но проблема в том, что мне нужно обновлять местоположение драйвера каждый раз в фоновом режиме и какое условие следует применять, чтобы обратный вызов выполнялся, когда водитель входит в зону геопространства всадника. Если ap находится в фоновом режиме, обрабатывать все. Должен ли я вносить какие-либо изменения в AppDelegate

- (NSArray *)geofencesForGeofenceManager:(QKGeofenceManager *)geofenceManager 
{ 
    NSArray *fetchedObjects = [self.fetchedResultsController fetchedObjects]; 
    NSMutableArray *geofences = [NSMutableArray arrayWithCapacity:[fetchedObjects count]]; 
    for (NSManagedObject *object in fetchedObjects) { 
     NSString *identifier = [object valueForKey:@"identifier"]; 
     CLLocationDegrees lat = [[object valueForKey:@"lat"] doubleValue]; 
     CLLocationDegrees lon = [[object valueForKey:@"lon"] doubleValue]; 
     CLLocationDistance radius = [[object valueForKey:@"radius"] doubleValue]; 
     CLLocationCoordinate2D center = CLLocationCoordinate2DMake(lat, lon); 
     CLCircularRegion *geofence = [[CLCircularRegion alloc] initWithCenter:center radius:radius identifier:identifier]; 
     [geofences addObject:geofence]; 
    } 
    return geofences; 
} 
+0

Если вы настроили область геозонности, которую хотите контролировать, вы получите вызов обратного вызова делегата 'didEnterRegion', даже если ваше приложение находится в фоновом режиме – Paulw11

+0

@ Paulw11, где вам нужно называть эти методы, В appdelegate или в классе, где у меня есть места –

ответ

0

я нашел альтернативу для достижения этой задачи. Поскольку мой метод делегата Didenterlocation не был вызван, я применил другой подход.

- (void)locationManager:(CLLocationManager *)manager 

    didUpdateLocations:(NSArray *)locations { 

    // If it's a relatively recent event, turn off updates to save power 
    NSLog(@"%@ locations",locations); 

    float Lat = _locationManager.location.coordinate.latitude; 
    float Long = _locationManager.location.coordinate.longitude; 

    NSLog(@"Lat : %f Long : %f",Lat,Long); 

    CLLocationCoordinate2D center = CLLocationCoordinate2DMake(28.58171,77.2915457); 

    NSLog(@"center check %@",center); 
    CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:center 
                   radius:500 
                  identifier:@"new region"]; 
    BOOL doesItContainMyPoint = [region containsCoordinate:CLLocationCoordinate2DMake(Lat,Long)]; 

    NSLog(@"success %hhd", doesItContainMyPoint); 

} 

путем отслеживания текущего местоположения, когда текущее местоположение координаты входа в координаты центра области, вы можете запустить уведомление о том, что пользователь вошел в этот конкретный регион.