Увеличьте MKMapView программно

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

componentDidMount() {
  const db = firebase.firestore();

  db.collection("posts")
    ...
    .then(querySnapshot => {
      this.setState({ data: querySnapshot })
    })
    ...
  }

  render() {
    return <MyNotes data={this.state.data} />;
  }
24
задан luca 31 March 2015 в 06:45
поделиться

6 ответов

Просто убираю ответ dkdarel

// delta is the zoom factor
// 2 will zoom out x2
// .5 will zoom in by x2
- (void)zoomMap:(MKMapView*)mapView byDelta:(float) delta {

    MKCoordinateRegion region = mapView.region;
    MKCoordinateSpan span = mapView.region.span;
    span.latitudeDelta*=delta;
    span.longitudeDelta*=delta;
    region.span=span;
    [mapView setRegion:region animated:YES];

}

Свифт Код:

func zoomMap(byFactor delta: Double) {
    var region: MKCoordinateRegion = self.mapView.region
    var span: MKCoordinateSpan = mapView.region.span
    span.latitudeDelta *= delta
    span.longitudeDelta *= delta
    region.span = span
    mapView.setRegion(region, animated: true)
}
23
ответ дан alain.s 28 November 2019 в 22:21
поделиться

Вот более простое решение:

MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
      userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
22
ответ дан Roosevelt 28 November 2019 в 22:21
поделиться

Вот мой способ переместить карту в точку аннотации и приблизить ее к ней. Вы можете легко изменить масштаб в строке CGFloat newLatDelta = 0.06f;

- (void)moveMapToAnnotation:(MKPointAnnotation*)annotation
{
    CGFloat fractionLatLon = map.region.span.latitudeDelta / map.region.span.longitudeDelta;
    CGFloat newLatDelta = 0.06f;
    CGFloat newLonDelta = newLatDelta * fractionLatLon;
    MKCoordinateRegion region = MKCoordinateRegionMake(annotation.coordinate, MKCoordinateSpanMake(newLatDelta, newLonDelta));
    [map setRegion:region animated:YES];
}
2
ответ дан Baca6u 28 November 2019 в 22:21
поделиться

Я использую код, похожий на ваш, и, похоже, он работает. Может случиться так, что ваша дельта изменяется недостаточно, чтобы увеличить уровень масштабирования от одного уровня масштабирования Google до следующего. Это также будет зависеть от начального состояния вашей карты, что может объяснить, почему она прерывистая - так как вы устанавливаете карту и уровень масштабирования для начала, прежде чем пользователь нажмет кнопку масштабирования?

Вы также можно посмотреть в метод regionThatFits, который будет корректировать регион, который вы предоставляете (имя по памяти, так как у меня нет под рукой документов Apple).

1
ответ дан frankodwyer 28 November 2019 в 22:21
поделиться

В Свифте 4.2

let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
0
ответ дан onmyway133 28 November 2019 в 22:21
поделиться

Понятия не имею, правильный ли это способ сделать это, но я использую его для увеличения и уменьшения.

        case 0: { // Zoom In
        //NSLog(@"Zoom - IN");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;

        span.latitudeDelta=mapView.region.span.latitudeDelta /2.0002;
        span.longitudeDelta=mapView.region.span.longitudeDelta /2.0002;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
        break;

    // Zoom Out 
    case 2: {
        //NSLog(@"Zoom - OUT");
        MKCoordinateRegion region;
        //Set Zoom level using Span
        MKCoordinateSpan span;  
        region.center=mapView.region.center;
        span.latitudeDelta=mapView.region.span.latitudeDelta *2;
        span.longitudeDelta=mapView.region.span.longitudeDelta *2;
        region.span=span;
        [mapView setRegion:region animated:TRUE];
    }
27
ответ дан 28 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: