与UITableView单元格和当前位置的距离

时间:2015-04-03 01:21:06

标签: ios objective-c iphone uitableview

我正在创建一个iOS应用程序,其中我有一些包含多个坐标的数据结构,我知道当前的用户位置。我想用TableView的单元格填充用户当前位置到TableView中位置的距离。

我想知道何时应该计算用户当前位置与TableView中所有位置之间的距离。应用程序启动时,我应该计算所有这些距离吗?当用户更改位置时我该怎么办?设置某种计时器以检查用户的位置是否发生变化,并在每次用户位置发生变化时重新计算距离?

我还应该注意,我让他们能够按距离对TableView进行排序。

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以使用CLLocationManagerDelegate的locationManager:didUpdateLocations:Method。

当用户的位置更新时调用此方法,以便您可以调用方法在用户当前位置的tableview中显示数据。

下面是一些用于对arryOfLocation进行排序的代码。

for (int i = 0; i < arrySortByLocation.count; i++)
    {
        //Current Location Details
        NSMutableDictionary *dict = [[arrySortByLocation objectAtIndex:i] mutableCopy];

        CLLocationDegrees latitude = [dict[@"city_lat"] doubleValue];
        CLLocationDegrees longitude = [dict[@"city_lng"] doubleValue];
        CLLocation *location = [[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
        CLLocationDistance distance = [appDele.userLocation distanceFromLocation:location];
        dict[@"distance"] = [@(distance) stringValue];

        //Storing as string since latitude and longitude is also string values
        //Since its a dictionary storing as NSNumber is better

        [arrySearchLocation setObject:dict atIndexedSubscript:i];
    }

    //sorting based on distance
    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"distance.doubleValue" ascending:YES];
    [arrySortByLocation sortUsingDescriptors:@[descriptor]];
}

希望这会对你有帮助..