【问题标题】:iOS 6 Map problems with MKUserTrackingModeFollowWithHeadingMKUserTrackingModeFollowWithHeading 的 iOS 6 地图问题
【发布时间】:2013-03-17 20:14:37
【问题描述】:

我正在尝试解决 iOS 6 中 MKUserTrackingModeFollowWithHeading 的两个问题:

  • MKUserTrackingModeFollowWithHeading 工作短暂,但它很紧张,几乎立即返回到MKUserTrackingModeFollow,尤其是在高缩放级别时。

  • 重复更改MKUserTrackingMode 时,应用程序偶尔会崩溃:我在主线程上得到EXC_BAD_ACCESS,没有更多信息。这很难重现,但它已经反复发生。

对可能导致这种情况的任何想法?这感觉像是一个错误,但苹果自己的“地图”应用程序没有表现出这种行为。

为了隔离问题,我创建了一个带有MKMapViewUIToolbar(在.xib 中设置)的单视图应用程序,我将向其中添加MKUserTrackingBarButtonItemUIViewController 充当<MKMapViewDelegate>。下面是完整的实现代码:

#import "ViewController.h"

@implementation ViewController

@synthesize mapView, toolbar;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add MKUserTrackingBarButtonItem to toolbar
    MKUserTrackingBarButtonItem *trackButton = [[MKUserTrackingBarButtonItem alloc] initWithMapView:self.mapView];
    [toolbar setItems:[NSArray arrayWithObjects:trackButton, nil] animated:YES];
}


- (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated
{
    // Log MKUserTrackingMode change
    NSString *modeType = (mode == 0) ? @"None" : ((mode == 1) ? @"Follow" : @"FollowWithHeading");
    NSLog(@"MKUserTrackingMode changed to: %@", modeType);
}

@end

【问题讨论】:

  • 此问题可能与我遇到的其他 MapKit 问题有关,也可能无关:iOS 6 Map doesn't zoom with MKUserTrackingModeFollow
  • 我遇到了同样的问题。您是否偶然找到了解决方法?
  • @Jochen 我还没有找到解决方法或解决方案。在我的应用中,我最终禁用了 MKUserTrackingModeFollowWithHeading。
  • 在 iPhone 4 iOS 6.0.1 上看到同样的问题

标签: ios iphone mkmapview mapkit core-location


【解决方案1】:

这是 MapKit 中的 bug。它也可以在使用 MapKit 的 Apple Maps 中观察到,例如 Find My Friends 应用程序。请注意,Apple Maps 应用程序没有使用 MapKit(至少不是同一版本),因此它不受此错误的影响。

我也确实看到了 MapKit 中零星的 EXC_BAD_ACCESS 崩溃。事实上,与 MapKit 相关的崩溃占我应用程序崩溃的绝大部分。 :(

【讨论】:

    【解决方案2】:

    我还注意到 MKUserTrackingModeFollowWithHeading 工作很短暂,它几乎立即变为 MKUserTrackingModeFollow,尤其是在高缩放级别时。

    我试过了

    - (void)mapView:(MKMapView *)mapView didChangeUserTrackingMode:(MKUserTrackingMode)mode animated:(BOOL)animated {
        if (mapView.userTrackingMode != MKUserTrackingModeFollowWithHeading) {
            [mapView setUserTrackingMode:MKUserTrackingModeFollowWithHeading];
        }
    }
    

    但这会创建一个永久循环,因为在我更改为 MKUserTrackingModeFollowWithHeading 之后,某些内容会更改回 MKUserTrackingModeFollow。这真的很烦人,因为我不知道是什么不断将跟踪模式更改为 MKUserTrackingModeFollow。

    对不起,我的回答没有用,但我在这里发布以确认问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-07
      • 2012-09-27
      相关资源
      最近更新 更多