【问题标题】:Navigate user to location using maps app使用地图应用程序将用户导航到位置
【发布时间】:2011-07-07 16:18:32
【问题描述】:

我有一个带有许多注释的地图视图。当用户点击注释时,它会将他们带到一个详细信息页面,其中包含有关艺术品的信息和一个“获取到此位置的路线”的按钮。所以这就是我要决定的。我刚刚使用的地图视图具有当前用户位置,这是我需要将 URL 中的起点发送到地图应用程序。最好将最近的 userLocation 坐标从地图视图传递到下一页,以便我可以在用户需要方向时使用它,或者我应该在下一页上启动一个新的 CLLocationManager 来获取用户的位置。另外,我尝试了后者,但无法从经理那里获取用户的位置。我所做的只是在界面中声明管理器:

CLLocationManager *manager;

“属性”它:

@property (nonatomic, retain) CLLocationManager *manager;

“合成”它:

@synthesize manager;

在 viewDidLoad 中执行此操作:

 [manager startUpdatingLocation];

然后在“导航”IBAction 方法中执行此操作:

-(IBAction)navigate; {
    CLLocationCoordinate2D start = manager.location.coordinate;
    CLLocationCoordinate2D end = {[selectedArtPiece.latitude doubleValue], [selectedArtPiece.longitude doubleValue]};
    [[UIApplication sharedApplication] openURL:[[NSURL alloc] initWithString: [NSString stringWithFormat:@"http://maps.google.com/?saddr=%1.6f,%1.6f&daddr=%1.6f,%1.6f", start.latitude, start.longitude, end.latitude, end.longitude ]]];

}

"end" 最终为 0,0,所以我一定遗漏了一些东西。

所以我的问题是:

1.我在 CLLocationManager 上做错了什么。

2。假设我什至可以让它工作,你会建议这样做来获取当前位置,还是应该从以前的地图视图发送一个稍微过时(可能)的用户位置以用于方向?仅仅为了获得方向坐标而启动 CLLocationManager 是否值得花费电池和时间?

感谢您的任何反馈!

【问题讨论】:

    标签: xcode mkmapview cllocationmanager userlocation


    【解决方案1】:

    要使用CLLocationManager,您需要对其进行alloc+init,设置其委托,然后调用startUpdatingLocation,并在委托方法locationManager:didUpdateToLocation:fromLocation:中读取当前位置(如果找到)。

    但是,在您的情况下,我不会费心尝试再次实时获取当前位置。用户点击注释和出现详细信息页面之间的时间不会很长,从而产生显着差异。相反,我会在详细信息页面中添加一个 startingLocation 属性,并将其设置为地图视图 userLocation,然后再显示详细信息页面。

    这样,用户不必(可能)等到找到新的、更准确的当前位置,它实际上会显示用户在点击注释之前看到的当前位置的方向。

    【讨论】:

    • 感谢您的反馈,我认为这可能是一种更好的方法,特别是因为用户可以在新经理有足够的时间阅读之前点击导航按钮。另一个菜鸟问题:如何设置一个类中的属性值与另一个类?我需要将它作为参数发送给方法吗?
    • 根据您呈现详细信息页面的方式,您可以将其作为参数添加到详细信息页面视图控制器的自定义 init 方法中,或者只是添加一个属性并在呈现之前对其进行设置。类似于:在详细信息页面界面中输入@property (assign) CLLocationCoordinate2D startingLocation;,然后在显示详细信息页面之前输入detailPageVC.startingLocation = mapView.userLocation.location.coordinate;
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-12
    • 2012-07-28
    相关资源
    最近更新 更多