MKMapView 无法按位置设置中心

Posted

技术标签:

【中文标题】MKMapView 无法按位置设置中心【英文标题】:MKMapView Cannot Set Center By Location 【发布时间】:2013-03-22 08:11:23 【问题描述】:

我想在 MKMapView 上获取当前位置并动画到这个坐标。我得到了当前位置,但我没有在 MKMapView 上对这个位置进行动画处理。如何用蓝点动画到当前位置?

- (void)viewDidLoad

    [super viewDidLoad];

    locationManager = [[CLLocationManager alloc] init];

    self.mapView.delegate = self;
    [self.mapView setShowsUserLocation:YES];

    locationManager.delegate=self;
    locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    locationManager.distanceFilter=kCLDistanceFilterNone;

    [locationManager startUpdatingLocation];


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


    location = [locationManager location];

    CLLocationCoordinate2D coord;
    coord.longitude = location.coordinate.longitude;
    coord.latitude = location.coordinate.latitude;
    lat = coord.latitude;
    longt = coord.longitude;

    [self.mapView setCenterCoordinate:coord animated:TRUE];


- (void)mapView:(MKMapView *)mv didAddAnnotationViews:(NSArray *)views


    MKAnnotationView *annotationView = [views objectAtIndex:0];
    id<MKAnnotation> mp = [annotationView annotation];
    MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance([mp coordinate] ,250,250);
    [mv setRegion:region animated:YES];

【问题讨论】:

你想根据用户当前的位置来设置地图视图中心.M i 对吗? 是的,我想根据用户当前位置设置地图视图中心 【参考方案1】:
self.mapView.userTrackingMode = MKUserTrackingModeFollow

这将用一个蓝点跟随用户的位置,这似乎是你想要实现的

【讨论】:

什么也没发生。地图无法缩放到当前位置。 是否调用了您的位置委托方法?你是在设备上还是模拟器上运行? 如果你在 didUpdateLocation 方法中放置了一个断点,它会被命中吗?【参考方案2】:

您必须注册 MKMapView 的 userLocation.location 属性的 KVO 通知。

为此,请将此代码放入 ViewController 的 viewDidLoad: 中或初始化地图视图的任何位置。

[self.mapView.userLocation addObserver:self forKeyPath:@"location"  
           options:(NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld)   context:NULL];

然后实现这个方法来接收KVO通知

- (void)observeValueForKeyPath:(NSString *)keyPath  ofObject:(id)object  change:(NSDictionary *)change  context:(void *)context
   

    if ([self.mapView showsUserLocation])
      
        [self moveOrZoomOrAnythingElse];
    

【讨论】:

它不起作用。地图仍然无法移动或缩放到用户的位置。

以上是关于MKMapView 无法按位置设置中心的主要内容,如果未能解决你的问题,请参考以下文章

MKMapView setRegion 到 Annotation

userLocation 上的中心 MKMapView(最初) - 仅适用于 iPhone 4?

按两点之间的距离设置区域

iOS 8 MKMapView 用户位置请求失败

如何在当前位置设置 MKMapView 区域并关注用户位置?

使用 MKMapView、核心位置和核心数据