Остановить MKMapView от перезагрузки - PullRequest
1 голос
/ 24 ноября 2010

У меня MKMapView с прокруткой и отключением userInteraction в 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?

Ответы [ 2 ]

1 голос
/ 30 ноября 2010

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

Мне потребовалось выпустить MKMapView в пользовательском методе UITableViewCell dealloc.

1 голос
/ 24 ноября 2010

Попробуйте установить область карты / область карты на то, что вы хотите, а затем измените свойства 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;
...