iOS:每次用户加载应用程序时,如何刷新MKMapView用户位置

时间:2014-01-17 02:24:13

标签: ios iphone mkmapview xcode5

我实现了MKMapView并且在用户第一次加载应用程序时工作正常但在此之后即使用户从后台返回也不会刷新用户位置。

这部分代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.mapView.delegate=self;
    self.mapView.zoomEnabled = YES;
    self.mapView.userTrackingMode = MKUserTrackingModeFollow;
    self.mapView.zoomEnabled = YES;
    self.mapView.showsUserLocation = YES;
}

我尝试在viewWillAppear中实现上面的代码,以查看每次用户加载应用时它是否会重新加载但是它不起作用。

你们中的任何人都知道每次应用程序加载时如何重新加载mapview?

我真的很感谢你的帮助。

4 个答案:

答案 0 :(得分:1)

您可以使用以下委托方法:

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

答案 1 :(得分:0)

有点不清楚你的意思是“不刷新用户位置”和“重新加载”所以我假设你想要的是在重新加载时将地图重新​​定位在用户的当前位置。

首先,要触发事物,您需要AppDelegate applicationDidBecomeActive:或applicationWillEnterForeground:方法中的代码。这是您可以启动操作的“触发器”通知。

然后,重新定位当前位置,例如:

- (void) _putMapToCurrentlLocation
{
    CLLocation* location = [[LocationManager sharedInstance] currentLocation];

    MKCoordinateRegion newRegion;
    newRegion.span.latitudeDelta = 0.13;
    newRegion.span.longitudeDelta = 0.12;
    newRegion.center.latitude = location.coordinate.latitude - (0.2*newRegion.span.latitudeDelta);
    newRegion.center.longitude = location.coordinate.longitude;

    [self.mapView setRegion:newRegion animated:YES];

    self.mapView.showsBuildings = YES;
    self.mapView.showsPointsOfInterest = YES;
    self.mapView.showsUserLocation = YES;
}

注意:“LocationManager”类是我的一个单独的类,它只处理从iOS注册位置通知并保持最近报告的位置。如果你需要帮助,那就是一个完整的问题......: - )

答案 2 :(得分:0)

您的解决方案是通知。尝试实现以下

//appdelegate.m
- (void)applicationDidBecomeActive:(UIApplication *)application
{
   if([[UIApplication sharedApplication] applicationState]==UIApplicationStateActive)
   {
         [[NSNotificationCenter defaultCenter] postNotificationName:@"applicationEnterForeground" object:self];
   }
}

//yourViewController.m
- (void)viewDidLoad
{
   [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadMapView) name:@"applicationEnterForeground" object:nil];
}

-(void)reloadMapView
{
    NSLog(@"Reload your map view here");
}

答案 3 :(得分:-1)

在ViewController的viewDidLoad方法中添加观察者,如果用户再次加载应用程序并在方法中编写代码以刷新地图视图

[[NSNotificationCenter defaultCenter]addObserver:self
                                         selector:@selector(yourMethod)
                                             name:UIApplicationDidBecomeActiveNotification
                                           object:nil];

在dealloc方法中删除观察者

- (void) dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:Nil];
}