每次您的位置发生变化时,您都应该计算距离并将其存储在相应的位置数据中,并将键作为距离。现在在使用滑块的值更改调用的委托方法处,使用
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 是限制内的数组。选择任何你想要的。