0

J'ai travaillé sur un tracker de temps de nom d'application. L'utilisateur peut manuellement glisser et glisser manuellement en cliquant sur le bouton.Se connecter et se déconnecter de la capture en fonction de l'emplacement dans ios

Maintenant, je voudrais le rendre aussi automatique basé sur la détection de l'emplacement. Pour cela, j'utilise la classe CLLocationManager. Cela fonctionne parfois bien et parfois il donne de mauvais détails de balayage. J'utilise le code ci-dessous.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
     [locationManager requestWhenInUseAuthorization]; 

     [locationManager startUpdatingLocation]; 

}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

    _latitude.text = [NSString stringWithFormat:@"Latitude: %f", newLocation.coordinate.latitude]; 
    _longitude.text = [NSString stringWithFormat:@"Longitude: %f", newLocation.coordinate.longitude]; 

    if([_latitude.text doubleValue] > 17.76890) && [_longitude.text doubleValue] > 78.34567) { 

     if (isSwipeIn) { 
      isSwipeIn = false; 
      //necessary swipe out UI and logic 
     } else { 
      isSwipeIn = true; 
      //necessary swipe in UI and logic 
     } 
    } 
} 

Quelqu'un peut-il me aider sur ce ..

Répondre

0

Il y a une autre façon de faire, vous pouvez obtenir la distance de l'emplacement cible et vérifier avec horizontalAccuracy de l'emplacement actuel . Le delta indique la distance entre l'emplacement actuel et l'emplacement ciblé. Si delta est inférieur à (<) horizontalAccuracy que l'emplacement actuel est dans un cercle avec un rayon de horizontalAccuracy.

Si delta est supérieur à (>) horizontalAccuracy que l'emplacement actuel est trop éloigné de l'emplacement ciblé.

Alors maintenant CLLocationManager méthode déléguée sera ressemble comme ci-dessous:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { 

    _latitude.text = [NSString stringWithFormat:@"Latitude: %f", newLocation.coordinate.latitude]; 
    _longitude.text = [NSString stringWithFormat:@"Longitude: %f", newLocation.coordinate.longitude]; 

    // Create Location object for your target location. e.g. (17.76890,78.34567) 
    CLLocation *targetLocation = [[CLLocation alloc] initWithLatitude:17.76890 longitude:78.34567]; 
    CLLocationDistance delta = [newLocation distanceFromLocation:targetLocation]; 

    if (delta > newLocation.horizontalAccuracy) { 
     if (isSwipeIn) { 
      isSwipeIn = false; 
      //necessary swipe out UI and logic 
     } else { 
      isSwipeIn = true; 
      //necessary swipe in UI and logic 
     } 
    } 
} 
1

Au lieu de comparer lat long, optez pour un contrôle de plage comme si votre appareil est à quelques marque de mètres comme swipe dans autrement glisser dehors.

Vous pouvez vérifier la distance entre deux à l'aide lat long méthode suivante en Objective-C

CLLocation *location; // Your Location to compare 
CLLocation *currentLocation; // Your current location 
double distance = [location distanceFromLocation:currentLocation]; // Returns distance in meters 

// Now lets say you are within 5 meters mark Swipe In 

if(distance <= 5) 
    // Mark swipe IN 
else 
    // Mark swipe OUT 

J'espère que cela vous aidera. Bonne codification :)