1

我将地图放入我的 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;
}

它可以工作,但当我第一次打开地图视图时,它会显示南极海附近的一个区域(针头指向坐标,但地图显示南极海域),关闭并重新打开地图视图时,它准确地显示了我的图钉。

如何在第一次打开时显示在 Pin 上放大的地图?

太感谢了!

4

1 回答 1

1

这段代码没有任何问题。我可能只是coordinate为您定义一个属性AddressAnnotation,让编译器合成适当的设置器并摆脱自定义设置器,尽管这可能与您描述的问题无关......这样做更容易,它确保注释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,它可以工作。

于 2013-03-24T19:21:35.867 回答