Zoom автоматически возвращается к исходному уровню - PullRequest
0 голосов
/ 12 апреля 2011

Моя цель состоит в том, чтобы сделать карту, на которой пользовательское местоположение показано с аннотацией и масштабированием, все в порядке, местоположение там с красной аннотацией и симпатичным масштабированием, для этого у меня есть вид, который называется PositionActuelleViewController , вот мой код:

PositionActuelleViewController.h :

@interface PositionActuelleViewController : UIViewController<MKMapViewDelegate,CLLocationManagerDelegate> {


        MKMapView                   *mapView;
            MKReverseGeocoder           *geoCoder;
        MKPlacemark         *mPlacemark;
        CLLocationCoordinate2D  location;

       }
@property (nonatomic,retain)IBOutlet MKMapView *mapView;

@end

PositionActuelleViewController.m :

    - (void)viewDidLoad {
        [super viewDidLoad];
        [mapView setShowsUserLocation:TRUE];
        [mapView setMapType:MKMapTypeStandard];
        [mapView setDelegate:self];
        [self.view insertSubview:mapView atIndex:0];
        CLLocationManager *locationManager=[[CLLocationManager alloc] init];
        [locationManager setDelegate:self];
        [locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
        [locationManager startUpdatingLocation];
    }

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    location = newLocation.coordinate;
    MKCoordinateRegion region;
    region.center = location;
    MKCoordinateSpan span;
    span.latitudeDelta = .005;
    span.longitudeDelta = .005;
    region.span = span;
    [mapView setRegion:region animated:TRUE];

}

Моя единственная проблема в том, что увеличение всегда включено, даже если пользователь уменьшает карту, он автоматически увеличивается. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

Если вы хотите увеличить только один раз, вы можете, например, добавить логический ivar с именем didZoomToUserLocation.

В viewDidLoad инициализируйте его как NO перед вызовом startUpdatingLocation:

didZoomToUserLocation = NO;
[locationManager startUpdatingLocation];

Затем в didUpdateToLocation измените код следующим образом:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    location = newLocation.coordinate;

    if (didZoomToUserLocation)
        return;

    didZoomToUserLocation = YES;

    MKCoordinateRegion region;
    region.center = location;
    MKCoordinateSpan span;
    span.latitudeDelta = .005;
    span.longitudeDelta = .005;
    region.span = span;
    [mapView setRegion:region animated:TRUE];    
}

Обратите внимание, что это также прекратит следить за пользователем на карте (но местоположение ivar все равно будет обновлено).

Если вы хотите следить за пользователем, но увеличивать масштаб только в первый раз, сделайте это вместо:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{

    location = newLocation.coordinate;

    if (didZoomToUserLocation)
    {
        //just re-center map on user's location without changing zoom...
        [mapView setCenterCoordinate:newLocation.coordinate animated:YES];
    }
    else
    {
        didZoomToUserLocation = YES;

        MKCoordinateRegion region;
        region.center = location;
        MKCoordinateSpan span;
        span.latitudeDelta = .005;
        span.longitudeDelta = .005;
        region.span = span;
        [mapView setRegion:region animated:TRUE];
    }        
}

Кроме того, в вашем viewDidLoad вам не нужно вызывать insertSubview для mapView, если он создан в IB.

0 голосов
/ 13 апреля 2011

Ваш код в didUpdateToLocation устанавливает диапазон фиксированного значения.Каждый раз, когда вызывается этот делегатский вызов, он устанавливает масштаб на основе этих диапазонов .005.

Если вы просто установите точку останова или войдите в функцию, вы увидите, что она обычно вызывается довольно часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...