Остановить MKMapView от перезагрузки

У меня есть MKMapView с отключенной прокруткой и пользовательским взаимодействием в UITableViewCell. Желаемый эффект (фактически статическое изображение карты в определенном положении) работает очень хорошо, но когда MKMapView перемещается по экрану и за его пределы (прокручивая), он перезагружает карту, что иногда вызывает сбой приложения. Я загрузил пользовательский UITableViewCell, как и любой другой UITableViewCell в cellForRowAtIndexPath:

if(indexPath.section == 0 && indexPath.row == 0)
{
    MapTableViewCell *cell = (MapTableViewCell *)[tableView dequeueReusableCellWithIdentifier:[NSString stringWithFormat:@"%@Map", cellIdentifier]];

    if(cell == nil)
    {
        cell = [[[MapTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier] autorelease];
    }

    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MapTableViewCell" owner:self options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[UITableViewCell class]])
        {
            cell = (MapTableViewCell *)currentObject;
            break;
        }
    }

    return cell;
}

Я обнаружил, что с этим текущим методом, если вы позволите загрузить изображение карты перед перемещением UITableView, тогда все в порядке. Но если вы уберете его с экрана до того, как он завершит загрузку, он вылетит! :(

Я просто укажу, что я не хочу иметь возможность каким-либо образом управлять картой или показывать на ней какие-либо аннотации. Я пытался сделать снимок экрана карты, скрыть его с экрана и отобразить этот снимок экрана как UIImageView в UITableViewCell, но это было недостаточно быстро!

РЕДАКТИРОВАТЬ: Обновленный код. Это полный код этого метода. Является ли мое пользовательское выделение TableViewCell здесь неправильным?


person ingh.am    schedule 24.11.2010    source источник
comment
Не очевидно, какого результата вы на самом деле хотите достичь. По грубому предположению, если делегатом MKMapView является ячейка, вам может потребоваться отменить установку делегата в ячейке -dealloc. Я также не могу понять, что должна делать ваша загрузка пера.   -  person tc.    schedule 24.11.2010
comment
Я сделал это сейчас спасибо. Думаю, это могло быть то, что вы знаете. Должен ли я также выпустить MapView здесь?   -  person ingh.am    schedule 24.11.2010
comment
@tc Dealloc, похоже, ячейка работала. Поставьте это как ответ, и я поставлю вам зеленую галочку!   -  person ingh.am    schedule 25.11.2010


Ответы (2)


Попробуйте установить область карты/область карты на то, что вы хотите, а затем измените свойства userInteractionEnabled и zoomEnabled. Так что, вероятно, что-то вроде этого:

MKCoordinateRegion region;
region.center = "location";  //a CLLocationCoordinate2D location of where ever

MKCoordinateSpan span;
span.latitudeDelta = 0.03; //desired size for both latDelta and lonDelta
span.longitudeDelta = 0.03;
region.span = span;

[mapView setRegion:region animated:YES];

А затем для свойств попробуйте следующее:

mapView.zoomEnabled = NO;
mapView.userInteractionEnabled = NO;
person Matt    schedule 24.11.2010

Спасибо tc за ответ (комментарий выше).

Что требовалось от меня, так это освободить MKMapView в пользовательском методе Dealloc UITableViewCell.

person ingh.am    schedule 30.11.2010