我製作了一個地圖,以自動放大顯示用戶位置,但是當用戶嘗試縮小時,它會自動縮放,這不切實際,您能幫我嗎禁用用戶縮小時的自動放大功能嗎?。這裏是我的代碼部分:當用戶縮小時自動縮放重置
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
// store new user location
location = newLocation.coordinate;
//move the map to the new user location
MKCoordinateRegion region;
region.center = location;
// zoom level
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
// apply new coordinates
[mapView setRegion:region animated:TRUE];
}
編輯: 我在viewDidLoad中添加以下語句:
mapView.zoomEnabled=FALSE;
應該禁用它在當用戶縮小自動變焦?
- (void)viewDidLoad {
[super viewDidLoad];
//
// On veut afficher la position courante de l'utilisateur
[mapView setShowsUserLocation:TRUE];
// MKMapTypeStandard est un mode d'affichage parmis 3 disponibles
// (les deux autres sont MKMapTypeSatelitte et MKMapTypeHybrid et MKMapTypeStandard)
[mapView setMapType:MKMapTypeHybrid];
// Le fait de setter le Delegate permet d'appeler méthodes implémentées dans cette classe
[mapView setDelegate:self];
// On ajoute la View du mapView a la View du controlleur courant afin de faire afficher la carte
[self.view insertSubview:mapView atIndex:0];
// CLLocationManager permet la gestion de la position géographique de l'utilisateur
CLLocationManager *locationManager=[[CLLocationManager alloc] init];
// Le fait de setter le Delegate permet d'appeler méthodes implémentées dans cette classe
[locationManager setDelegate:self];
// Définit l'échelle de distance à prendre en compte pour le raffraichissement de la position courante
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager startUpdatingLocation];
mapView.zoomEnabled=FALSE;
}
編輯: 我仍然工作在這一點,所以在繼續之前,我想告訴你我的邏輯,我等待你的建議:) 所以,在我看來這是充電爲了向我顯示地圖上的用戶位置,添加了一個布爾變量來測試用戶是否調整了縮放比例。 .H
BOOL shouldAdjustZoom;
和方法:
-(void)zoomLevelForMapRect:(MKMapRect)mRect withMapViewSizeInPixels:(CGSize)viewSizeInPixels;
-(void)setShouldAdjustZoom:(BOOL)shouldAdjZoom;
-(BOOL)shouldAdjustZoom;
.M
我添加了吸氣-(BOOL)shouldAdjustZoom
的實施,使此getter將調用zoomLevelForMapRect
知道縮放級別是否改變。
-(BOOL)shouldAdjustZoom
{
[self zoomLevelForMapRect];
return shouldAdjustZoom;
}
-(void)zoomLevelForMapRect:(MKMapRect)mRect withMapViewSizeInPixels:(CGSize)viewSizeInPixels {
NSUInteger zoomLevel=20;
MKZoomScale zoomScale=mRect.size.width/viewSizeInPixels.width;
double zoomExponent=log2(zoomScale);
zoomLevel=(NSUInteger)(20-ceil(zoomExponent));
if(zoomLevel<20)
{
[self setShouldAdjustZoom:NO];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
location = newLocation.coordinate;
MKCoordinateRegion region;
region.center = location;
if ([self shouldAdjustZoom]==YES) {
// Use the manually defined span
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
} else {
// Keep the current span
MKCoordinateRegion mapRegion = mapView.region; // To get the current span
mapRegion.center = newLocation.coordinate;
mapView.region = mapRegion;
}
MKCoordinateSpan span;
span.latitudeDelta = .005;
span.longitudeDelta = .005;
region.span = span;
[mapView setRegion:region animated:TRUE];
}
我需要知道的是,我應該怎麼稱呼的zoomLevelForMapRect
方法,它與參數,在吸氣我需要調用它:
-(BOOL)shouldAdjustZoom
{
[self zoomLevelForMapRect];//how should I fix the call??
return shouldAdjustZoom;
}
嗨,THX很多關於你的解釋,問題,你的意思是「考慮使用一個標誌來交替你想要的行爲。」 ?thx – Malloc 2011-04-10 10:44:50
經緯度和經度變量假設包含從哪裏? – Malloc 2011-04-10 12:18:54
緯度和經度是用戶的位置,不適合更新我的答案。 – Robert 2011-04-10 18:24:43