iOS:单击按钮获取坐标,然后停止所有位置服务
Posted
技术标签:
【中文标题】iOS:单击按钮获取坐标,然后停止所有位置服务【英文标题】:iOS: Get Coordinates on button click, then stop all location services 【发布时间】:2014-08-18 17:33:12 【问题描述】:现在,我有它,所以当单击按钮时,它会启动定位服务,设置纬度/经度变量。但定位仍在后台继续运行。
我想要的是,当我点击一个按钮时,它会找到纬度/经度,所有定位服务都会停止。
这是我目前拥有的。
- (IBAction)startButton:(id)sender
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
NSLog(@"%@", [self lat]);
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
CLLocation *currentLocation = newLocation;
if (currentLocation != nil)
[self setLat:[NSString stringWithFormat:@"%.6f", currentLocation.coordinate.latitude]];
另一个问题是,如果我立即尝试检索 lat 属性的值,它会返回 null,很可能是因为需要一两秒才能找到位置。
所以我还需要停止运行任何进一步的代码,直到设置 lat/long 属性。例如,我将如何阻止 otherFunction
运行直到找到纬度/经度:
- (IBAction)startButton:(id)sender
[self updateLocation];
[self otherFunction];
- (void)updateLocation
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
[locationManager startUpdatingLocation];
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
NSLog(@"didFailWithError: %@", error);
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle:@"Error" message:@"Failed to Get Your Location" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[errorAlert show];
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
CLLocation *currentLocation = newLocation;
if (currentLocation != nil)
[self setLat:[NSString stringWithFormat:@"%.6f", currentLocation.coordinate.latitude]];
[locationManager stopUpdatingLocation]
任何帮助/想法将不胜感激!
【问题讨论】:
调用[locationManager stopUpdatingLocation]
应该会阻止它。您可以检查lat
值(和longitude
)以了解何时停止它。你试过什么?
@Larme:是的,这行得通,但是关于我的第二段代码,如何防止 [self otherFunction]
在设置 lat/long 之前运行?
在获得位置时调用 otherFunction(即,在您停止更新位置之后。
@Larme: otherFunction 必须由按钮触发。编辑:也许不是,可能结构不同
【参考方案1】:
在您的最后一个函数中,在您验证 currentLocation 不为零后,您应该检查 currentLocation 的准确性,然后调用您的 setLat: 函数,然后停止更新位置。有关详细信息,请参阅此帖子:
CLLocationManager and accuracy issues - any experiences?
【讨论】:
以上是关于iOS:单击按钮获取坐标,然后停止所有位置服务的主要内容,如果未能解决你的问题,请参考以下文章
通过单击android studio中的按钮将我的当前位置发送给所有用户
如何使用开始和停止 UIButtons 连续跟踪位置坐标并查找距离 [关闭]