我使用自定义UITableview单元格来显示我当前位置与世界上几个随机位置之间的距离。如果我现在的位置是纽约市,那么我现在的位置和印度之间的距离大约是4000英里左右。我当前到伦敦的位置之间的距离是2000英里等。现在我想在我的表视图中使用滑块来定义指定范围内的位置。例如,如果我将滑块的最小值设置为0英里并将最大值设置为50英里,我想在我的Tableview中仅显示该范围内的那些位置(此处为50英里)。如果我增加或减少滑块范围,我的tableview中的值也应该更改。我使用CLLocation查找两点之间的距离。
我们很感激。
答案 0 :(得分:0)
每当您的位置发生变化时,您应计算并将距离存储在相应的位置数据中,并将键作为距离。现在,在使用滑块值更改调用的委托方法中,使用
过滤数组NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(distance BETWEEN %@)",@[[NSNumber numberWithInt:loweValue], [NSNumber numberWithInt:upperValue]]];
filteredLocations = [allLocations filteredArrayUsingPredicate:predicate];
[table reloadData]
这里allLocations是一个包含所有位置的数组,filteredLocations是存储过滤位置的数组,并在tableView中显示它们。
如果您不想存储距离,则在滑块值更改委托使用
NSArray *allPlaces;
CLLocation *myLocation;
float lowerValue,uppervalue;
NSMutableArray *filteredPlaces;
[allPlaces enumerateObjectsWithOptions:NSEnumerationConcurrent
usingBlock:^(id place, NSUInteger idx, BOOL *stop)
{
if (uppervalue>[myLocation distanceFromLocation:(CLLocation *)[place objectForKey:@"location"]]>lowerValue)
{
[filteredPlaces addObject:place];
}
}];
[tableView reloadData];
将根据用户的当前位置过滤值。这里allPlaces是包含所有位置的数组,myLocation是用户的当前位置,filteredPlaces是限制内的数组。选择你想要的任何东西。