iPhone GPS导航不会退出

时间:2013-11-30 10:33:24

标签: ios iphone gps xcode5

我的其中一个视图上有一个带有导航按钮的iPhone应用程序。当用户单击此按钮时,它使用电话CLLocationManager打开iPhone GPS应用程序。然后它会获取用户当前位置并显示导航到预定义的设定点。

此处一切正常,但当我退出GPS导航(通过点击手机主页按钮)并返回应用程序时,应用程序会显示视图,其上有导航按钮一秒或2,然后在没有点击任何按钮的情况下再次启动GPS导航。我也无法点击此处的任何按钮,例如我顶部导航栏中的后退按钮。

任何人都可以告诉我为什么会这样,我怎么能阻止它?这是我的GPS导航代码。

在我的viewDidLoad中,我以编程方式创建了导航按钮

UIButton *mapButton = [[UIButton alloc] init];
mapButton = [UIButton buttonWithType:UIButtonTypeCustom];
mapButton.tag = 1;
mapButton.frame = CGRectMake(20, 430, 280.f, 40.f);
UIImage *mapButtonImage = [UIImage imageNamed:@"gettingHereMapButton.png"];
[mapButton setBackgroundImage:mapButtonImage forState:UIControlStateNormal];
[self.view addSubview:mapButton];
[mapButton addTarget:self action:@selector(mapButtonClicked) forControlEvents:UIControlEventTouchUpInside];

然后转到

- (void) mapButtonClicked
{
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    locationManager.delegate = self;
    [locationManager startUpdatingLocation];
}

- (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    UIAlertView *alert =
    [[UIAlertView alloc] initWithTitle:@"Alert"
                           message:@"An error has occured. Please try again later."
                          delegate:self
                 cancelButtonTitle:@"Cancel"
                 otherButtonTitles:@"OK",
                 nil]; 
    [alert show];
}

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
    CLLocation *newLocation = [locations lastObject];
    CLLocation *oldLocation;

    NSString *destAddress = @"52.269444, -9.708674";
    NSString *url = [NSString stringWithFormat: @"http://maps.apple.com/maps?saddr=%f%f&daddr=%@",
                 newLocation.coordinate.latitude,
                 newLocation.coordinate.longitude,
                 [destAddress stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}

我需要添加什么来阻止这种情况发生?

2 个答案:

答案 0 :(得分:1)

问题在于,当您执行[locationManager startUpdatingLocation];时,locationManager会多次调用didUpdateLocations

要修复它,请

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

添加以下行:

[manager stopUpdatingLocation];

就在上面:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

答案 1 :(得分:0)

即使您致电stopUpdatingLocation,位置管理员也不会立即停止didupdateLocations。它将多次调用可能是2,3,4或更多时间。

最好,您可以选择一个BOOL,并在您的位置更新后进行检查,将其设置为YES并致电stopUpdatingLocaiton。因此,didUpdateLocations再次致电时,请检查您的BOOL。并决定是否需要执行操作。

注意:位置管理员大多数时间不会一次性提供准确的位置。处理CLLocationMananger时必须小心。

使用CoreLocation之前请阅读以下链接:

http://www.perspecdev.com/blog/2012/02/22/using-corelocation-on-ios-to-track-a-users-distance-and-speed/

http://www.peachpit.com/articles/article.aspx?p=1830485&seqNum=2