Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 更改视图后,MKMapView将重置_Ios_Xcode_Mkmapview_Mapkit_Core Location - Fatal编程技术网

Ios 更改视图后,MKMapView将重置

Ios 更改视图后,MKMapView将重置,ios,xcode,mkmapview,mapkit,core-location,Ios,Xcode,Mkmapview,Mapkit,Core Location,我的MKMapView有一个问题,在我将当前视图更改为另一个视图并再次返回地图后,它会一直重置。事实上,第一次一切顺利,地图正确地以用户位置为中心,但不是第二次 这是我的密码: MapViewController.h #import <UIKit/UIKit.h> #import <MapKit/MapKit.h> #import <CoreLocation/CoreLocation.h> @interface MapViewController : UIV

我的
MKMapView
有一个问题,在我将当前视图更改为另一个视图并再次返回地图后,它会一直重置。事实上,第一次一切顺利,地图正确地以用户位置为中心,但不是第二次

这是我的密码:

MapViewController.h

#import <UIKit/UIKit.h>
#import <MapKit/MapKit.h>
#import <CoreLocation/CoreLocation.h>

@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate>

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

@end
这是一些照片

第一次:

第二次:


谢谢大家帮我解决这个问题,祝你有个好日子

我查看了文档,找到了mapView属性visibleMapRect
推送新视图时,将此值存储为类属性。 例:

初始化
currentRect=CGRectZero

在推送新视图之前,

currentRect = mapView.visibleMapRect;
当您稍后访问此视图时,将调用mapView委托,并在其中一个委托方法中编写以下代码

if (currentRect.size.width!=0)
  [mapView setVisibleMapRect:currentRect animated:YES].

它会起作用。

创建一个不同的方法来更新区域

-(void)yourMethod{

MKCoordinateRegion region; 
MKCoordinateSpan span; 
span.latitudeDelta = 0.009; 
span.longitudeDelta = 0.009; 
CLLocationCoordinate2D location; 
location.latitude = self.yourmapview.userlocation.coordinate.latitude; 
location.longitude = self.yourmapview.userlocation.coordinate.longitude; 
region.span = span; 
region.center = location; 
[self.yourMapView setRegion:region animated:YES]; 
}

-(void)viewWillAppear{
//After [self.view addSubview:mapView];
[self yourMethod];
}

尝试一下,但现在不要更新“didUpdateUserLocation”。另外,如果在“ViewWillExample”方法中的“yourMapView.location”中有值,请告诉我。

好的,我知道了。您是在谈论缩放级别吗?当您移出视图时,请使用map.center存储缩放级别和位置坐标。然后,当您再次返回时,将地图中心和缩放级别设置为它。创建一个不同的方法来更新该区域,并将其添加到MKCoordinateRegion区域;Mk坐标跨度;span.latitudeDelta=0.009;span.longitudeDelta=0.009;CLLOCATION坐标2D定位;location.latitude=self.yourmapview.userlocation.coordinate.latitude;location.longitude=self.yourmapview.userlocation.coordinate.longitude;region.span=span;region.center=位置;[self.yourMapView setRegion:region-animated:YES];在做了您已经在做的事情之后,在viewdidload中调用它。在didUpdateUserLocation中调用相同的函数1)为什么在@implementation正上方的.m文件中声明了另一个全局
mapView
?你不需要它。2) 在.h中,您有一个标记为IBOutlet的地图视图,因此您将其连接到xib中的地图视图,对吗?那么,为什么要在viewDidLoad中创建并添加一个新的?3) 这就是MapViewController.m中的全部代码吗?是否对.m文件中的mapView执行其他操作?4) 您如何“将当前视图更改为另一个视图并返回”?您能显示该代码吗?学员出口应连接到底部的橙色圆圈图标(红色立方体左侧的图标)。然后注释掉整个viewDidLoad方法。感谢您的帮助,但是您的代码不起作用,事实上结果与之前相同:-/。我尚未将值设置为“mapView.location”。另外,按照您的代码,是否必须将“viewDidLoad”替换为“ViewWillAppeal”?您可以使用mapview.userlocation。此外,viewdidload和ViewWillAspect是两种不同的方法。您不能简单地将一个替换为另一个。再次感谢您,我尝试了另一次[使用ViewWillDisplay,将其替换为viewDidLoad和viceversa],但仍然不起作用:-(.我不知道问题出在哪里:-/你能更好地解释一下吗?例如,使用我在问题中发布的代码?我不知道你写的那些行的确切位置:-/visibleMapRect属性保存mapView的位置和缩放级别。因此,当你从mapView移动到另一个视图时,你可以存储此值。当你从otherView返回到mapView,使用此方法设置mapView的区域,这样你的mapView将显示最后一个位置。再次感谢你,但是你能在我在问题中发布的那一行中写一些代码,让我更好地理解这些代码行应该放在哪里吗?我是一名业余程序员:-/。非常感谢你的时间@三户:-)
if (currentRect.size.width!=0)
  [mapView setVisibleMapRect:currentRect animated:YES].
-(void)yourMethod{

MKCoordinateRegion region; 
MKCoordinateSpan span; 
span.latitudeDelta = 0.009; 
span.longitudeDelta = 0.009; 
CLLocationCoordinate2D location; 
location.latitude = self.yourmapview.userlocation.coordinate.latitude; 
location.longitude = self.yourmapview.userlocation.coordinate.longitude; 
region.span = span; 
region.center = location; 
[self.yourMapView setRegion:region animated:YES]; 
}

-(void)viewWillAppear{
//After [self.view addSubview:mapView];
[self yourMethod];
}