MKMapПросмотреть, как создать insertAnnotationAtIndex - PullRequest
1 голос
/ 22 марта 2011

Из-за соображений производительности мне нужно сделать двоичную вставку в моем списке аннотаций, но после того, как я достиг той части, где мне действительно нужно вставить аннотацию, я понял, что мой mapView не совпадает с NSMutableArray, поэтому яне может свободно добавлять аннотацию в середине списка.

while (first <= last) {
    NSUInteger mid = (first + last)/2;
    if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedDescending) {
        first = mid + 1;
    } else if ([name compare:[mapView.annotations objectAtIndex:mid]] == NSOrderedAscending) {
        last = mid - 1;
    } else {
        Annotation *destination = [[Annotation alloc] init];
        [destination setTitle:name];
        [destination setSubtitle:sub];
        [destination setCoordinate:coords];
        // method doesn't exist, but how do I create/simulate this?
        [mapView insertAnnotation:destination atIndex:mid];
        [destination release];
        return;
    }

}

Можно ли расширить отображение карты и создать собственный класс для этого?Если да, то как мне добавить аннотацию к индексу?

1 Ответ

1 голос
/ 23 марта 2011

Не полагайтесь на порядок аннотаций в свойстве annotations MKMapView.

Вид карты будет отображать любые аннотации, принадлежащие экрану, учитывая текущий диапазон и масштаб представления карты.Может случиться так, что внутренне представление карты даже не хранит аннотации в виде массива.В конце концов, он должен быть в состоянии найти все аннотации, которые географически близки к текущему региону, и массив не является структурой, которая лучше всего подходит для этого.

Если вы хотите сохранить аннотации отсортированнымиопределенным образом, вы должны поддерживать свой собственный массив.Вы можете использовать этот массив для добавления аннотаций к представлению карты при его настройке.Однако для обновления списка аннотаций вы должны добавлять или удалять только те аннотации, которые вы добавили или удалили из своего списка.То есть, вероятно, неэффективно удалять весь список аннотаций, а затем добавлять целый новый список, когда большинство аннотаций в новом списке совпадают.

...