gpt4 book ai didi

iphone - 检测用户何时滚动 MKMapView 一定距离?

转载 作者:行者123 更新时间:2023-12-03 18:41:09 25 4
gpt4 key购买 nike

我想确定用户是否滚动了超过一定比例的 map ,然后从用户位置禁用 map 居中(类似于 map 应用程序的工作方式)。

我不确定使用哪些方法。

我认为创建一个矩形并查看该矩形是否包含当前中心点会很简单,但是我必须以 IOS 3 为目标,因此我无法使用许多较新的 Mapkit api。

我尝试使用 CLLocation 进行测试,并在当前 map 中心和用户位置之间使用 distanceFrom,但我试图弄清楚该距离是否是某个百分比。

最佳答案

我个人认为,当有人发布一段代码而不是关于如何解决这个问题的一般散文时,它会更有帮助。这是我的想法——为了更好地回答这个问题而进行了粗略的修改:

在头文件中我有:

#define SCROLL_UPDATE_DISTANCE          80.00

在我看来(这都是 CLLocationManagerDelegate、MKMapViewDelegate 的委托(delegate)):

// this method is called when the map region changes as a delegate of MKMapViewDelegate
- (void)mapView:(MKMapView *)mapView regionDidChangeAnimated:(BOOL)animated
{
NSLog(@"regionDidChangeAnimated");
MKCoordinateRegion mapRegion;
// set the center of the map region to the now updated map view center
mapRegion.center = mapView.centerCoordinate;

mapRegion.span.latitudeDelta = 0.3; // you likely don't need these... just kinda hacked this out
mapRegion.span.longitudeDelta = 0.3;

// get the lat & lng of the map region
double lat = mapRegion.center.latitude;
double lng = mapRegion.center.longitude;

// note: I have a variable I have saved called lastLocationCoordinate. It is of type
// CLLocationCoordinate2D and I initially set it in the didUpdateUserLocation
// delegate method. I also update it again when this function is called
// so I always have the last mapRegion center point to compare the present one with
CLLocation *before = [[CLLocation alloc] initWithLatitude:lastLocationCoordinate.latitude longitude:lastLocationCoordinate.longitude];
CLLocation *now = [[CLLocation alloc] initWithLatitude:lat longitude:lng];

CLLocationDistance distance = ([before distanceFromLocation:now]) * 0.000621371192;
[before release];
[now release];

NSLog(@"Scrolled distance: %@", [NSString stringWithFormat:@"%.02f", distance]);

if( distance > SCROLL_UPDATE_DISTANCE )
{
// do something awesome
}

// resave the last location center for the next map move event
lastLocationCoordinate.latitude = mapRegion.center.latitude;
lastLocationCoordinate.longitude = mapRegion.center.longitude;

}

希望这能让您朝着正确的方向前进。

distanceFromLocation 是 iOS 3.2 及更高版本。initWithLatitude 是 iOS 2.0 及更高版本。MKCoordinateRegion 是 iOS 3.0 及更高版本。MKMapView centerCoordinate是iOS 3.0及更高版本。

另外,请随时介入并纠正我所犯的错误。我正在自己解决所有这些问题——但到目前为止,这对我来说效果相当好。

希望这对某人有帮助。

关于iphone - 检测用户何时滚动 MKMapView 一定距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5468617/

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