0

在我的应用程序中,我试图获取两个位置之间的距离。我按下应用程序的按钮,穿过(大)房间,CLLocationDistance 返回为 0.000000。

.h 文件:

@property (strong, nonatomic) IBOutlet UIImageView *stopButton;
@property (strong, nonatomic) CLLocationManager *locationManager;
@property (strong, nonatomic) CLLocation *firstLocation;
@property (strong, nonatomic) CLLocation *secondLocation;
@property (strong, nonatomic) IBOutlet UILabel *locationLabel;

.m 文件:

- (void)viewDidLoad {
    [super viewDidLoad];
     self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.distanceFilter = kCLDistanceFilterNone;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    [self.locationManager startUpdatingLocation];
    self.firstLocation = [self deviceLocation];
}

- myButtonFunction {
    self.secondLocation = [self deviceLocation];
    self.locationLabel.text = [[NSString alloc] initWithFormat:@"%f", [self.firstLocation distanceFromLocation:self.secondLocation]];
}

- (CLLocation *)deviceLocation {
    return [[CLLocation alloc] initWithLatitude:self.locationManager.location.coordinate.latitude longitude:self.locationManager.location.coordinate.longitude];
}
4

2 回答 2

0

通过使用设备位置,您对实际录制的内容失去了很多控制。例如,设备位置可能存在不更新的情况,除非您的位置变化超过 20 米......或者它可能每小时更新一次。你没有办法知道。

正如 Josh 所说,您必须从CLLocationManagerDelegate回调中获取位置。将它们存储在您的班级中,并在按下按钮时记录您存储的最后位置。只有这样,您才能获得与您指定的位置设置相关的数据。

于 2013-07-13T04:04:33.493 回答
0

您需要等到位置管理器告诉您它有新信息。在此之前,您将始终获得相同的位置。

经理将通过委托方法通知您locationManager:didUpdateLocations:locationManager:didUpdateToLocation:fromLocation:对于 iOS < 6.0)。您需要将一个实现该方法的类分配为位置管理器的委托,并且在调用该方法之前您无法检查新位置。

另外,请注意,第一次调用该方法时,实际上可能没有数据。请参阅我在“核心位置负值”中的回答

于 2013-07-13T02:36:49.523 回答