MKCoordinateRegion 与 region.span.latitudeDelta 之间的区别?



我一直在学习一段代码,并试图理解MKCoordinateRegionregion.span.latitudeDelta之间的区别?

MKCoordinateRegion region = {{0.0, 0.0}, {0.0, 0.0}};
region.center.latitude = latitude;
region.center.longitude = longitude;
region.span.latitudeDelta = 0.1f;

有人可以解释一下基于上述差异的原因吗?我觉得第一行决定了地图的框架,但其余的似乎重复了这一点(我在地图上定义了框架和位置)

region是一个MKCoordinateRegion。因此,第一行使用结构初始化局部变量(使用旧的 C89 约定):

MKCoordinateRegion region = {{0.0, 0.0}, {0.0, 0.0}};

随后的行只是使用所需的值更新先前初始化的结构:

region.center.latitude = latitude;
region.center.longitude = longitude;
region.span.latitudeDelta = 0.1f;

对于它的价值,您也可以实例化它并在一个步骤中设置所有值(再次使用 C89 约定):

MKCoordinateRegion region = { { latitude, longitude }, { 0.1, 0.1 } };

或者,如今,可以使用指定初始值设定项的 C99 约定:

MKCoordinateRegion region = {
.center = { .latitude = latitude, .longitude = longitude },
.span = { .latitudeDelta = 0.1, .longitudeDelta = 0.1 }
};

同样,这将在一个步骤中初始化和填充MKCoordinateRegion(在这种情况下,以比 C89 模式更不神秘的方式)。

另一种方法是使用各种xxxMake函数构建CLLocationCoordinate2DMKCoordinateSpanMKCoordinateRegion

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(latitude, longitude);
MKCoordinateSpan span = MKCoordinateSpanMake(0.1, 0.1);
MKCoordinateRegion region = MKCoordinateRegionMake(center, span);

有关初始化 C 结构的更多信息,请参阅如何根据 C 编程语言标准初始化结构。此外,GCC 文档还讨论了指定的初始值设定项,包括结构。


或者,如果您尝试设置地图视图的区域,另一种方法是改用MKMapCamera

CLLocationCoordinate2D center = CLLocationCoordinate2DMake(latitude, longitude);
MKMapCamera *camera = [MKMapCamera cameraLookingAtCenterCoordinate:center fromDistance:1000 pitch:0 heading:0];
[self.mapView setCamera:camera animated:true];

但是,最重要的是,region实际上是地图将显示的纬度和经度坐标的范围(由地图正在查找的centerspan,地图的可见程度的组合定义)。

所有这些地图坐标和跨度都不应与地图视图的frame混淆,后者是将显示该区域的地图视图的视觉大小。

最新更新