了解功能算法

时间:2015-01-01 08:21:49

标签: swift mkmapview

在学习教程中,我使用函数显示可见的rect,包含所有注释(在mapView上),如下所示:

// 1
let rectToDisplay = self.treasures.reduce(MKMapRectNull) { (mapRect: MKMapRect, treasure: Treasure) -> MKMapRect in
// 2
let treasurePointRect =
MKMapRect(origin: treasure.location.mapPoint,
size: MKMapSize(width: 0, height: 0)) 
return MKMapRectUnion(mapRect, treasurePointRect)
// 3
}
// 4
self.mapView.setVisibleMapRect(rectToDisplay, edgePadding: UIEdgeInsetsMake(74, 10, 10, 10), animated: false)

一切正常,但我不明白它是如何运作的。

在第三道,我们正在做以下事情:

return MKMapRectUnion(mapRect, treasurePointRect)

在此之前,我们宣布

mapRect: MKMapRect

因此,mapRect没有任何初始值,并且假设不包含任何值。我对吗?

如果mapRect的值为零,那么MKMapRectUnion究竟是如何计算的?有什么办法可以使用某种NSLog语句查看函数的每一步吗?

如果你这么善良,请详细解释我该功能是如何运作的。据我所知,函数尝试使地图Rect组合“零”值地图点和其他mapPoint,具有正确的值。

1 个答案:

答案 0 :(得分:1)

你已经正确地理解了一切。至于你的问题

  

如果mapRect的值为零,MKMapRectUnion究竟是如何计算的?

apple docs说:

  

如果任一矩形为null,则此方法返回另一个矩形。   返回矩形的原点设置为较小的   两个矩形的x和y值。同样,大小和   通过取最大x和y来计算矩形的宽度   值并减去新原点的x和y值。

如何计算,您可以询问苹果工程师或对mapkit进行逆向工程。如果该功能确实可以正常工作,那么你就没有这么长的时间并转移到真正的作业中。