我将地图放入我的iOs应用程序中,然后以这种方式设置它:
- (void)viewDidLoad {
[super viewDidLoad];
CLLocationCoordinate2D cord = {.latitude = 44.508473, .longitude = 11.375828};
[self.myMap setRegion:MKCoordinateRegionMake(cord, MKCoordinateSpanMake(.005, .005)) animated:YES];
AddressAnnotation * annotazione = [[AddressAnnotation alloc] init];
[annotazione setCoordinate:cord];
[self.myMap addAnnotation:annotazione];
}
和AddressAnnotation.m:
- (void)setCoordinate:(CLLocationCoordinate2D)coord {
coordinate = coord;
}
它有效,但是第一次打开地图的视图时,它显示了Antartica海附近的区域(针对坐标的针头,但是地图显示了Antartic海域)以及关闭并重新打开地图的视图,它显示了我的针脚。
如何在首次打开时显示地图缩放?
非常感谢你!
答案 0 :(得分:1)
这段代码没有错。我可能只为你的coordinate
定义一个AddressAnnotation
属性,让编译器合成相应的setter并摆脱自定义setter,虽然这可能与你描述的问题无关......它只是更容易这样做,它确保注释的coordinate
符合KVO等。
我可能会建议您将视图控制器定义为地图视图的委托,然后实现regionDidChangeAnimated
:
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
NSLog(@"%s %f, %f %d", __FUNCTION__, mapView.region.center.latitude, mapView.region.center.longitude, animated);
}
知道region
设置的内容可能会有用,也许你可以对正在进行的工作进行逆向工程。
但是,最重要的是,问题与您在问题中包含的代码无关,而问题无疑会在其他地方出现。
通过在项目中执行此操作,我看到了以下日志:
2013-03-30 23:11:12.326 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0 2013-03-30 23:11:12.328 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] 44.508473, 11.375828 0 2013-03-30 23:11:12.328 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0 2013-03-30 23:11:12.329 iBo[25408:c07] -[POIMapController mapView:regionDidChangeAnimated:] -47.422141, 0.000000 0
所以,显然你的区域设置正在发生,但是在此之后还有其他东西正在重置区域。稍微玩一下,我发现这种行为只在使用自动布局时才会显现。如果您关闭自动布局,此行为就会消失,并且它会像您期望的那样工作。
或者,我注意到,如果您移动代码以将区域设置为viewDidLoad
(在视图创建过程中很早(创建视图之后,但在它们出现之前),并将其放置在viewDidAppear
,它有效。