я использую эти методы для получения моего местоположения. Все отлично работает в simulator.but на реальном устройстве работает очень быстро. Как я могу замедлить это, а также как я могу показать ошибку только один раз, если устройство не вставило sim а также для пользователя, которому запрещено использовать текущее местоположение.
вот методы -
-(void)GetCurrentLocation {
// Create the location manager if this object does not
// already have one.
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];
if (locationManager.locationServicesEnabled == NO) {
UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[servicesDisabledAlert show];
[servicesDisabledAlert release];
[locationManager release];
}
else{
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters;
[btnGPSFix setHidden:NO];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];// Sub. duration
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromRight forView:btnGPSFix cache:YES];
[self showMsg:@"Getting a GPS fix..." WithDelay:7];
[UIView commitAnimations];
[locationManager startUpdatingLocation];
}
}
// Делегировать метод из протокола CLLocationManagerDelegate.
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
// If it's a relatively recent event, turn off updates to save power
NSDate* eventDate = newLocation.timestamp;
NSTimeInterval howRecent = [eventDate timeIntervalSinceNow];
if (abs(howRecent) < 5.0) {
[manager stopUpdatingLocation];
printf("latitude %+.6f, longitude %+.6f\n",newLocation.coordinate.latitude,newLocation.coordinate.longitude);
LatitudeData = [[NSString alloc] initWithFormat:@"%f",newLocation.coordinate.latitude];
LongitudeData = [[NSString alloc] initWithFormat:@"%f",newLocation.coordinate.longitude];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:1.0];// Sub. duration
[UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:btnGPSFix cache:YES];
[self showMsg:@"GPS Acquired" WithDelay:4];
[UIView commitAnimations];
[self insertIntoDataBase];
}
// else skip the event and process the next one.
}
вот мой метод [self showMsg: WithDelay:]
- (void)showMsg:(NSString*)Message WithDelay:(int)delay
{
CGRect frame = CGRectMake(30, 366, 259, 37);
[btnGPSFix setTitle:Message forState:UIControlStateNormal];
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
frame.origin.y = 366;
btnGPSFix.frame = frame;
[UIView commitAnimations];
// Hide the view after the requested delay
[self performSelector:@selector(HideGpsFixButton) withObject:nil afterDelay:delay];
}
Вот HideGpsFixButton Метод
- (void)HideGpsFixButton
{
// Slide the view down off screen
CGRect frame = CGRectMake(30, 366, 259, 37);
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.0];
frame.origin.y = 480;
btnGPSFix.frame = frame;
[UIView commitAnimations];
}
Я проверил на устройстве, оно показывает получение сообщения об исправлении GPS. В устройстве не установлена SIM-карта. Я хочу показать только одно сообщение, что на вашем устройстве не установлена SIM-карта или если пользователь запретил службу определения местоположения, то покажите сообщение. служба определения местоположения отключена пользователем. Любая помощь приветствуется.