gpt4 book ai didi

iphone - 纬度/经度坐标到屏幕位置的奇怪转换

转载 作者:行者123 更新时间:2023-12-03 19:58:04 29 4
gpt4 key购买 nike

我的应用程序上有一张 map ,它显示 2 种注释:位置和位置集群。当我放大集群时,集群会展开以显示集群中包含的位置。当这些位置添加到 map 时,其父簇的坐标将存储在注释对象中。我想要做的是制作一个动画,以便在添加这些位置时,它们从父集群的位置展开。这是我的 mapView 代码:didAddAnnotationViews:

- (void)mapView:(MKMapView *)mapView didAddAnnotationViews:(NSArray *)views
{
MKAnnotationView *aV;
for (aV in views)
{
if (([aV.annotation isKindOfClass:[PostLocationAnnotation class]]) && (((PostLocationAnnotation *)aV.annotation).hasParent))
{
CLLocationCoordinate2D startCoordinate = ((PostLocationAnnotation *)aV.annotation).parentCoordinate;

CGPoint startPoint = [ffMapView convertCoordinate:startCoordinate toPointToView:self.view];

CGRect endFrame = aV.frame;

aV.frame = CGRectMake(startPoint.x, startPoint.y, aV.frame.size.width, aV.frame.size.height);

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDuration:1.00];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[aV setFrame:endFrame];
[UIView commitAnimations];

((PostLocationAnnotation *)aV.annotation).hasParent = NO;
}
}
}

这似乎使 map 点从远离 View 焦点的某个位置飞入。通过调试,我发现 endFrame.origin 和 startPoint 的值之间存在巨大差异 - 对于一个特定的 aV,endFrame.origin 出现为(32657,21781)(都是 CGFloats),而 startPoint 出现为(159.756256,247.213226) )(同样,都是 CGFloats)。我假设 endFrame.origin 是正确的值,因为这些点最终到达我想要的位置,它们只是来自很远的地方。我在代码的许多其他部分使用了convertCooperative:toPointToView:方法,没有出现任何问题。我还尝试将 startPoint 的 X 和 Y 值乘以各种值,但单个系数并不适用于 startPoint 的每个值。知道发生了什么吗?

最佳答案

注释 View 的框架似乎基于当前缩放级别,然后从屏幕坐标偏移。为了弥补这一点,请通过 annotationVisibleRect.origin 偏移 startPoint

此外,在调用 convertCooperative:toPointToView: 时,我认为转换为 map View 的框架而不是 self.view 更安全,因为 map View 可能不同大小大于容器 View 。

尝试以下更改:

CGPoint startPoint = [ffMapView convertCoordinate:startCoordinate 
toPointToView:ffMapView];
//BTW, using the passed mapView parameter instead of referencing the ivar
//would make the above line easier to re-use.

CGRect endFrame = aV.frame;

aV.frame = CGRectMake(startPoint.x + mapView.annotationVisibleRect.origin.x,
startPoint.y + mapView.annotationVisibleRect.origin.y,
aV.frame.size.width,
aV.frame.size.height);

关于iphone - 纬度/经度坐标到屏幕位置的奇怪转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7915187/

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