MKMapView 在 iPad 上的渲染问题

Posted

技术标签:

【中文标题】MKMapView 在 iPad 上的渲染问题【英文标题】:MKMapView rendering problem on iPad 【发布时间】:2011-02-25 22:47:57 【问题描述】:

我的问题只出现在 iPad 上。 MKMapView 总是有未渲染的部分(下图右侧)。一旦我触摸这个窗口,地图视图就会重新绘制它自己就好了。但它永远不会立即正确渲染。此问题出现在 ios 4.2 以及 iOS 3.2 中的模拟器和设备中。构造MKMapView的代码如下:

- (void)viewDidLoad 
      [super viewDidLoad];  
      mapview = [[[MKMapView alloc] initWithFrame:CGRectMake(0,0,self.view.frame.size.width,230)] autorelease]; // because of apples bug
      mapview.autoresizingMask = UIViewAutoresizingFlexibleWidth;
      MKCoordinateSpan globe = MKCoordinateSpanMake(100, 100);

      CLLocationCoordinate2D worldCenter; worldCenter.latitude = 42.032974; worldCenter.longitude =21.359375;

      MKCoordinateRegion worldmap = MKCoordinateRegionMake(worldCenter, globe);
      mapview.region = worldmap;
      mapview.zoomEnabled = NO;
      mapview.showsUserLocation = YES;
      mapview.delegate = self;

      NSRange theRange;
      theRange.location = 1;
      theRange.length = [annotations count]-1;

      [mapview addAnnotations:[annotations subarrayWithRange:theRange]];
      [self.view addSubview:mapview];   

问题仅在横向显示。

更新

这是我触摸视图后它的跨越方式。

【问题讨论】:

看起来您正试图将地图置于世界中心的中心,但其跨度太大而无法填满整个屏幕?据我所知,屏幕右侧没有地图“左侧”可供渲染 - 即那是世界末日:) - 所以尝试使用跨度值,看看它是否能解决你的问题。 @Rog 我一触摸这个视图,它就呈现得很好。它总是有足够的世界观,因为它通过裁剪地球的高度来自动缩放。 很酷,当您触摸屏幕并重新渲染时,您在右侧看到了什么?我刚刚在地图应用上尝试了最大缩小,右侧与您在上面发布的内容一致,所以我很好奇!? @Rog 我添加了第二张截图。 @Rog 今晚我将尝试与中锋和跨度一起比赛。我只是在想,因为我们的星球围绕着中心点,所以不能真正偏离。跨度可以,但应该通过自动缩放来补偿。 【参考方案1】:

不过,这是 Apple 的错误。在 iPad 横向模式下,您的经度跨度可能不足以覆盖全球 360 度。它应该通过缩放自动缩放,但事实并非如此。仅当您的 centerMap 恰好位于经度 0 度时,它才会正确自动缩放。奇怪的。

解决方法:

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
    CLLocationCoordinate2D worldCenter; worldCenter.latitude = 42.032974; 
    worldCenter.longitude = UIDeviceOrientationIsLandscape(toInterfaceOrientation)? 0.0 : 21.359375;
    mapview.centerCoordinate = worldCenter;

【讨论】:

【参考方案2】:

我对您的代码进行了快速测试,得到了相同的结果(这是我所期望的)。我仍然认为这不是地图本身的问题,而是您设置中心坐标加上地图跨度的方式。您正在尝试使用最大跨度将地图向左偏远,而地图填充整个屏幕并保持中心点的唯一方法是让它自行拉伸,这是不可取的。如果您将 lat 和 long 设置为 0,您将获得相同的视图而不会丢失部分。

【讨论】:

以上是关于MKMapView 在 iPad 上的渲染问题的主要内容,如果未能解决你的问题,请参考以下文章

在后台加载 MKMapView 并从中创建 UIImage (iPhone & iPad)

在 iPad/iPhone 上的 CSS 提交按钮奇怪的渲染

MKMapView 注释第二次不可选择

访问 MKMapView 的地图瓦片

您如何在 Swift Playgrounds 中的 iPad 上的 SwiftUI 中渲染 Text("Content") 与 Mac 上的 Xcode?

iPhone/iPad 设备上的 OpenGL 渲染 GL_POINTS 看起来很糟糕(但在模拟器中看起来完全没问题)