Вы не должны возвращать компоненты из методов жизненного цикла. Установите данные API, выбранные в локальном состоянии, а затем передайте их компоненту в функции рендеринга.
componentDidMount() {
const db = firebase.firestore();
db.collection("posts")
...
.then(querySnapshot => {
this.setState({ data: querySnapshot })
})
...
}
render() {
return <MyNotes data={this.state.data} />;
}
Просто убираю ответ 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)
}
Вот более простое решение:
MKUserLocation *userLocation = mapView.userLocation;
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance (
userLocation.location.coordinate, 50, 50);
[mapView setRegion:region animated:NO];
Вот мой способ переместить карту в точку аннотации и приблизить ее к ней. Вы можете легко изменить масштаб в строке 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];
}
Я использую код, похожий на ваш, и, похоже, он работает. Может случиться так, что ваша дельта изменяется недостаточно, чтобы увеличить уровень масштабирования от одного уровня масштабирования Google до следующего. Это также будет зависеть от начального состояния вашей карты, что может объяснить, почему она прерывистая - так как вы устанавливаете карту и уровень масштабирования для начала, прежде чем пользователь нажмет кнопку масштабирования?
Вы также можно посмотреть в метод regionThatFits, который будет корректировать регион, который вы предоставляете (имя по памяти, так как у меня нет под рукой документов Apple).
В Свифте 4.2
let location = mapView.userLocation
let region = MKCoordinateRegion(center: location.coordinate, span: MKCoordinateSpan(latitudeDelta: 50, longitudeDelta: 50))
mapView.setRegion(region, animated: true)
Понятия не имею, правильный ли это способ сделать это, но я использую его для увеличения и уменьшения.
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];
}