regionDidChangeAnimated

regionDidChangeAnimated

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

它可以工作,但是第一次打开 map 视图时,它会显示靠近南极海的区域(针头指向坐标,但 map 显示南极海域),然后关闭并重新打开 map 视图,它恰好显示了我的针脚。

如何在首次打开时显示放大的Pin上的 map ?

非常感谢!

最佳答案

这段代码没有错。我可能只是为自己的coordinate定义一个AddressAnnotation属性,然后让编译器合成适当的setter并摆脱自定义setter,尽管这可能与您描述的问题无关...这样做更容易,它可以确保注释的coordinate将符合KVO等。

我可能建议您将视图控制器定义为 map 视图的委托,然后实现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中,则可以正常工作。

08-26 10:46