gpt4 book ai didi

iphone - iOS编程中的中心 map

转载 作者:可可西里 更新时间:2023-11-01 03:26:44 24 4
gpt4 key购买 nike

我们如何在 map 中关注用户。我想让蓝点(用户位置)位于 map 的中心,但我还允许用户放大和缩小,然后在几秒钟后放大回到用户位置。

我对解决方案的有根据的猜测:我们会检测用户是否正在放大或缩小,在三秒内未检测到放大或缩小后,我们开始关注用户 :)。你的帮助会很棒 :)

此代码放大用户位置但不延迟放大和缩小:

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

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


}

最佳答案

快速浏览一下文档就会发现其中的魔力。
将 map 的 userTrackingMode 设置为 MKUserTrackingModeFollow
参见 here .


更新:

由于您已经更新了问题,这里是新答案。
为了将 map 重新​​定位到用户位置,我建议编写一个简单的辅助方法:

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

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

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

现在如果用户停止移动 map ,您应该在短暂的延迟后调用它。您可以在 mapView 的 regionDidChange 委托(delegate)方法中执行此操作。

但是,如果用户在真正重置 map 之前多次更改区域,那么如果不锁定重置方法,就会出现问题。因此,如果可以使 map 重新居中,那么制作一面旗帜是明智的。就像属性 BOOL canRecenter

使用 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;
}

现在您可以在用户以任何方式移动 map 后稍稍延迟地安全地调用它:

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

关于iphone - iOS编程中的中心 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325434/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com