【问题标题】:Map head nowhere on first time第一次地图头无处
【发布时间】:2013-03-24 18:21:33
【问题描述】:

我将地图放入我的 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 图上显示放大的地图?

非常感谢!

【问题讨论】:

    标签: ios xcode map coordinates


    【解决方案1】:

    这段代码没有任何问题。我可能只是为您的AddressAnnotation 定义一个coordinate 属性,并让编译器合成适当的设置器并摆脱自定义设置器,尽管这可能与您描述的问题无关......这样做更容易方式,它确保注解的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(这是在视图创建过程的早期(在视图创建之后,但在视图出现之前),并将其放入@ 987654328@,可以了。

    【讨论】:

    • 没什么用... NSLog return "2013-03-25 18:46:55.938 Hackathlon[23887:c07] -[MappeController viewDidLoad] nan, nan " 在 vi​​ewdidload 方法中写入行,但 pin 工作正常,简单,第一次打开,地图缩放到哪里!
    • @Matte.Car 这很令人沮丧,我敢肯定。不过,您的日志语句表明您将该日志语句放在viewDidLoad 中,我建议您将其放在regionDidChangeAnimated 中。尽管如此,问题并不在于您的问题中列出的代码。如果您可以将代码上传到某个地方,我很乐意看看。但是你问题中的小sn-p很好。 (我在自己的项目中对其进行了测试,效果很好。)
    • 我刚刚发现了一件很奇怪的事情:在我的应用程序中,地图出现在一些表格视图之后,它有这个问题,直接从那个屏幕启动应用程序就可以正常工作!
    • @Matte.Car 感谢您上传您的项目。我输入了regionDidChangeAnimated 的日志记录,看到您的区域设置正在发生,但是也发生了一些区域的自动布局驱动设置。您可以关闭自动布局,或者将您的区域设置移动到viewDidAppear(不是viewDidLoad,不是viewWillAppear)。请参阅我的更新答案。
    • 禁用自动布局我无法管理 3.5" 或 4" 显示器,所以我将 viewDidLoad 更改为 viewDidAppear!
    猜你喜欢
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2018-04-09
    相关资源
    最近更新 更多