2016-05-03 46 views
0

我有兩個位置,一個是驅動程序,另一個是騎手。我有兩個長的可用於兩者。我想在駕駛員進入地理圍欄區域時碰到api的車手位置。如何實現蘋果地圖的地理圍欄代碼ios 9

我經歷了QKGeofenceManager演示項目: 使用這個我可以提供經緯度和半徑來尋找地理圍欄。

但問題是我必須在後臺每次更新驅動程序位置以及應該應用什麼條件,以便在駕駛員進入騎手的地理圍欄區域時進行回調。如果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

如果您已經設置了要監視的geofence區域,那麼即使您的應用程序位於後臺 – Paulw11

+0

@ Paulw11中,您仍然需要調用您的'didEnterRegion'委託回調函數,您必須在其中調用這些方法: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); 

} 

通過保持當前的位置,只要在當前位置座標進入中心區域的座標的軌跡,你可以解僱通知用戶已經進入該特定區域。