首次映射无处可寻

时间:2013-03-24 18:21:33

标签: ios xcode map coordinates

我将地图放入我的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海域)以及关闭并重新打开地图的视图,它显示了我的针脚。

如何在首次打开时显示地图缩放?

非常感谢你!

1 个答案:

答案 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,它有效。