0

我正在使用自定义 UITableview 单元格来显示我当前位置与世界上几个随机位置之间的距离。如果我当前的位置是纽约市,那么我当前位置与印度之间的距离大约为 4000 英里,而我当前位置与伦敦之间的距离为 2000 英里等。现在我想在我的表格视图中使用滑块来在指定范围内定义一个地方。例如,如果我将滑块的最小值设置为 0 英里,最大值设置为 50 英里,我想在我的 Tableview 中仅显示该范围内的那些地方(这里是 50 英里)。如果我增加或减少滑块范围,我的表格视图中的值也应该改变。我正在使用 CLLocation 来查找两点之间的距离。

想法受到赞赏。

4

1 回答 1

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 是限制内的数组。选择任何你想要的。

于 2014-12-08T17:30:08.137 回答