Как удалить или скрыть фон в MKMapView при использовании пользовательских плиток

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

Я действительно ищу решение, которое является чисто iOS и не требует какого-либо стороннего программного обеспечения, но это может показаться трудным.

Я уже пробовал 3 метода:

Номер 1, скрывающий фоновую карту через вид:

NSArray *views = [[[self.mapView subviews] objectAtIndex:0] subviews];
[[views objectAtIndex:0] setHidden:YES];
  • это однако не работает на определенной новой операционной системе, выходящей очень скоро! Весь экран гаснет. Форум разработчиков Apple также не предоставил решения

Номер 2, Использование другого пустого наложения (например, MKCircle), чтобы покрыть фоновую карту. Это работает, однако, при быстрой прокрутке или уменьшении масштаба, иногда наложение мерцает, и вы можете ненадолго увидеть фоновую карту позади, поэтому она не идеальна.

Номер 3, и это то, над чем я работаю несколько дней, просто чтобы пользователь не уменьшал масштаб. Большинство документированных методов, как правило, используют regionDidChangeAnimated или regionWillChangeAnimated, однако, похоже, что они не останавливают уменьшение масштаба карты при сжатии - они ждут, пока движение зажима не закончится, прежде чем вступят в силу, поэтому снова это означает, что фоновую карту можно кратко просмотреть.

Так что теперь я в тупике, если, конечно, я что-то пропустил с этими двумя другими методами.

Так что любая помощь будет высоко ценится!

2 ответа

Решение

Вы не можете сделать это в текущих версиях без сторонней библиотеки, такой как MapBox. Тем не менее, будущий выпуск ОС, о котором вы говорите, позволит вам сделать это.

Добавь это:

-(void)viewDidAppear:(BOOL)animated    
{    
    MKTileOverlay *overlay = [[MKTileOverlay alloc] init];//        initWithURLTemplate:tileTemplate];    
    overlay.canReplaceMapContent = YES;    
    [map addOverlay:overlay];    
    overlay = nil;
}

-(void)loadTileAtPath:(MKTileOverlayPath)path result:(void (^)(NSData *, NSError *))result    
{    
    NSData *tile =nil;    
}

-(MKOverlayRenderer *)mapView:(MKMapView *)mapView  rendererForOverlay: (id<MKOverlay>)overlay    
{
    if ([overlay isKindOfClass:[MKTileOverlay class]])
    {
        MKTileOverlayRenderer *renderer = [[MKTileOverlayRenderer alloc]  initWithOverlay:overlay];    
        [renderer setAlpha:0.5];
        return renderer;
    }
}

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

Другие вопросы по тегам