中心的iOS地图程序(Center maps in iOS Programming)

2019-08-02 14:29发布

我们如何按照地图的用户。 我想有蓝点(用户位置)是在地图的中心,但我也允许用户放大和缩小,什么再经过几秒钟在用户位置回放大。

我对解决方案的猜测:我们发现,如果用户放大或缩小,无缩放的三秒钟后或退出检测,我们开始按照用户:)。 你的帮助将是真棒:)

在用户的位置,但此代码变焦不拖延放大和缩小:

     - (void)locationManager:(CLLocationManager *)manager
        didUpdateToLocation:(CLLocation *)newLocation
              fromLocation:(CLLocation *)oldLocation {

  MKCoordinateRegion userLocation = MKCoordinateRegionMakeWithDistance(newLocation.coordinate, 1500.0, 1500.0); [mapView setRegion:userLocation animated:YES];


    }

Answer 1:

我做了一个小例子来说明如何委派这项工作的地图SDK。 当然,你可以听的位置变化,但MKUserTrackingModeFollow自动为您完成此,这样的代码只是一行

#import <MapKit/MapKit.h>

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    MKMapView *mapView = [[MKMapView alloc] initWithFrame:self.view.frame];

    //Always center the dot and zoom in to an apropriate zoom level when position changes
    [mapView setUserTrackingMode:MKUserTrackingModeFollow];

    //don't let the user drag around the the map -> just zooming enabled
    [mapView setScrollEnabled:NO];

    [self.view addSubview:mapView];
}

然后该应用程序是这样的:

欲了解更多信息,只是阅读苹果文档: http://developer.apple.com/library/ios/#documentation/MapKit/Reference/MKMapView_Class/MKMapView/MKMapView.html



Answer 2:

就让我们来看看在文档揭示了魔术。
设置userTrackingMode您的地图的MKUserTrackingModeFollow
见这里 。


更新:

既然你已经更新了你的问题,这里的新的答案。
回到中心将映射出用户的位置,我会建议写一个简单的辅助方法:

- (void)recenterUserLocation:(BOOL)animated{
    MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);

    MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);

    [self.mapView setRegion:userRegion animated:animated];
}

现在,你应该,如果用户停止移动地图在短暂的延迟之后调用它。 你可以在做这个regionDidChange的MapView的委托方法。

但你可以得到的问题,如果你如果用户多次改变区域之前真的重置地图不锁复位方法。 因此,这将是明智的一个标志,如果有可能回到中心的地图。 就像一个属性BOOL canRecenter

使用init它YES和更新recenterUserLocation方法:

- (void)recenterUserLocation:(BOOL)animated{
    MKCoordinateSpan zoomedSpan = MKCoordinateSpanMake(1000, 1000);

    MKCoordinateRegion userRegion = MKCoordinateRegionMake(self.mapView.userLocation.coordinate, zoomedSpan);

    [self.mapView setRegion:userRegion animated:animated];

    self.canRecenter = YES;
}

现在,你可以安全地调用它的用户移动地图与小延迟任何方式后:

- (void)mapView:(MKMapView *)mMapView regionDidChangeAnimated:(BOOL)animated{
    if (self.canRecenter){
        self.canRecenter = NO;
        [self performSelector:@selector(recenterUserLocation:) withObject:@(animated) afterDelay:3];
    }
}


Answer 3:

我有同样的问题。 我猜的:

  1. 如果用户拖动地图,他想留在那个位置。
  2. 如果用户不执行任何操作或重置显示当前位置,我需要遵循用户。

我添加了一个复位按钮来显示这样的当前用户位置:

在复位按钮点击后,改变了needToCenterMapTRUE

添加在地图上拖动手势识别

// Map drag handler
    UIPanGestureRecognizer* panRec = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didDragMap:)];



- (void)didDragMap:(UIGestureRecognizer*)gestureRecognizer {
    if (gestureRecognizer.state == UIGestureRecognizerStateEnded){
        NSLog(@"Map drag ended");
        self.needToCenterMap = FALSE;
    }
}

其次在地图上用户根据needToCenterMap标志

- (void)mapView:(MKMapView *)mapView didUpdateUserLocation:(MKUserLocation *)userLocation
{
if (self.needToCenterMap == TRUE) 
    [mapView setCenterCoordinate:userLocation.location.coordinate animated:YES];
}


Answer 4:

这个壳做的伎俩: mkMapview.showsUserLocation = YES;



文章来源: Center maps in iOS Programming