我在iPhone上使用MapKit.如何知道用户何时更改缩放级别(放大\地图)?
我试过用mapView:(MKMapView*)mapView regionDidChangeAnimated:(BOOL)动画; 但即使只拖动地图也会调用它.不幸的是,当拖动地图时,mapView.region.span也会发生变化......
救命?
10倍
问题:我似乎无法停止Core Location向我的应用/跟踪发送更新.
我在做什么:在我的viewWillAppear调用中self.locationManager,将其传递给一个方法,以显示用户在地图上的位置(实例MKMapView).重写getter以检查服务器的可用性,以查看是否已授权.如果是这样,它allocs/inits和startMonitoringSignificantLocationChanges和returns.
在viewDidDisappear,我打电话[self.locationManager stopUpdatingLocation].但我仍然可以在状态栏中看到位置图标.即使我通过双击主页按钮并关闭它来终止应用程序,图标仍然存在...即使在延长的时间(10分钟以上)之后.当我转到设置应用程序时,它告诉我我的应用程序仍在使用位置服务(紫色图标).
问题:我在这里错过了什么?为什么位置更新不会停止?
提前致谢.
此代码设置以指定位置为中心的默认缩放级别viewDidLoad.该代码在以前版本的iOS中运行良好:
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Run Code Online (Sandbox Code Playgroud)
但是,在iOS6中,对于纬度高于~75(> 75.1)的位置,应用程序崩溃并显示以下消息:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
Run Code Online (Sandbox Code Playgroud)
我发现对于给定的缩放级别mapView无法在MKCoordinateRegion内部设置正确.[mapView regionThatFits:region]将所有值返回为nan.如果我region直接使用变量,它只显示默认地图(整个世界).
经过一些测试后,我发现通过调整visibleDistance我可以让代码正常工作.魔法距离似乎略高于20公里(对于一系列纬度和纬度的Delta值,大约在22到23公里之间).这只发生在北纬地区(-80工作正常).
初始定位后,地图可在任何位置工作.看起来Apple改变了可见地图区域的初始化方式.我正在为受影响的区域使用更高的缩放级别作为解决方法.有没有其他方法可以使它正常工作?
我正在使用故事板和Google地图构建iOS应用程序.使用iOS6
我的应用程序具有在Facebook应用程序中看到的拆分视图导航
在我的左视图中,我选择列表中的项目,该项目具有纬线/长线,并在我的地图上通过以下方法显示
- (void)viewWillAppear:(BOOL)animated
我想在添加另一个标记之前删除此方法中的所有标记(因此地图上只有一个标记),有没有办法做到这一点?下面是我在mapView中添加标记的代码
提前谢谢 - 乔恩
- (void)loadView
{
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:poi.lat
longitude:poi.lon
zoom:15];
mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
mapView.myLocationEnabled = YES;
self.view = mapView;
mapView.mapType = kGMSTypeHybrid;
//Allows you to tap a marker and have camera pan to it
mapView.delegate = self;
}
-(void)viewWillAppear:(BOOL)animated
{
GMSMarkerOptions *options = [[GMSMarkerOptions alloc] init];
options.position = CLLocationCoordinate2DMake(poi.lat, poi.lon);
options.title = poi.title;
options.snippet = poi.description;
options.icon = [UIImage imageNamed:@"flag-red.png"];
[mapView addMarkerWithOptions:options];
[mapView animateToLocation:options.position];
[mapView animateToBearing:0];
[mapView animateToViewingAngle:0];
}
Run Code Online (Sandbox Code Playgroud) 如何在实例上检测到单击MKMapView?我是否必须继承MKMapView并重写该touchesEnded方法?
谢谢,
-克里斯
我正在使用UIMapView在iPhone上显示位置.我想从当前位置到感兴趣的位置做一个方向,我认为不可能使用MapKit(但如果是请通知)所以我将打开Google Maps应用程序或safari来显示它.
我可以通过指定从(当前位置)到坐标(感兴趣的位置)的坐标来实现这一点,我有这些经度和纬度.或者我必须使用街道地址?
如果我必须使用街道地址,我可以从纬度和经度获得它们.
我已经将MKCircle作为MKOverlay添加到我的MKMapView中.我还添加了一个UISlider来决定圆的半径.不幸的是,当使用它时,它似乎有点"滞后",不像我想要的那样流畅.
示例:http: //dl.dropbox.com/u/3077127/mkoverlayDelay.mov
这是我的代码:
- (void)addCircle
{
// draw the radius circle for the marker
double radius = 2000.0;
MKCircle *circle = [MKCircle circleWithCenterCoordinate:location radius:radius];
[circle setTitle:@"background"];
[mapView addOverlay:circle];
MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:location radius:radius];
[circleLine setTitle:@"line"];
[mapView addOverlay:circleLine];
}
- (void)addCircleWithRadius:(double)radius
{
MKCircle *circle = [MKCircle circleWithCenterCoordinate:location radius:radius];
[circle setTitle:@"background"];
[mapView addOverlay:circle];
MKCircle *circleLine = [MKCircle circleWithCenterCoordinate:location radius:radius];
[circleLine setTitle:@"line"];
[mapView addOverlay:circleLine];
}
- (void)sliderChanged:(UISlider*)sender
{
[mapView removeOverlays:[mapView overlays]];
double radius = (sender.value * 100);
[self addCircleWithRadius:radius]; …Run Code Online (Sandbox Code Playgroud) 我正在试图做的是传递CLLocation给函数getPlacemarkFromLocation,然后使用传递CLLocation通过reverseGeocodeLocation设置CLPlacemark?将返回.
我在创建completionHandler闭包时遇到问题reverseGeocodeLocation,它会抛出编译器错误/崩溃:
在斯威夫特,CLGeocodeCompletionHandler是CLGeocodeCompletionHandler = (AnyObject[]!, NSError!) -> Void根据文档AnyObject[]!应该包含CLPlacemark的对象,就像Objective-C的版本.
这是我目前的代码:
class func getPlacemarkFromLocation(location:CLLocation)->CLPlacemark?{
var g = CLGeocoder()
var p:CLPlacemark?
g.reverseGeocodeLocation(location, completionHandler: {
(placemarks, error) in
let pm = placemarks as? CLPlacemark[]
if (pm && pm?.count > 0){
p = placemarks[0] as? CLPlacemark
}
})
return p?
}
Run Code Online (Sandbox Code Playgroud)
编辑:似乎错误placemarks.count与placemarks没有像数组一样对待.它现在编译,但是当我试图进入p内部时,我只得到零completionHandler.我检查了CLLocation被传递的内容并且它们是有效的. …
在Swift的iOS 8中使用MapKit时,如何设置自定义注释的地图位置变化的动画?我这样说:
UIView.animateWithDuration(0.25) {
var loc = ann.coordinate
loc.latitude = loc.latitude + 0.0005
loc.longitude = loc.longitude + 0.001
ann.coordinate = loc
}
Run Code Online (Sandbox Code Playgroud)
... ann自定义注释MyAnnotation在哪里.注释是跳跃而不是动画,到新的坐标位置.
令人讨厌的是,如果我在Objective-C中编写MyAnnotation,动画效果很好.但如果我在Swift中编写它,我就不再动画了!
仅供参考,这是我的MyAnnotation的Swift代码:
class MyAnnotation : NSObject, MKAnnotation {
var coordinate : CLLocationCoordinate2D
var title: String!
var subtitle: String!
init(location coord:CLLocationCoordinate2D) {
self.coordinate = coord
super.init()
}
}
Run Code Online (Sandbox Code Playgroud) mapkit ×10
ios ×7
iphone ×4
mkmapview ×4
google-maps ×2
swift ×2
animation ×1
annotations ×1
cllocation ×1
cocoa-touch ×1
coordinates ×1
ios4 ×1
ios6 ×1
ios6-maps ×1
mkannotation ×1
objective-c ×1
overlay ×1