在学习教程中,我使用函数显示可见的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,具有正确的值。
答案 0 :(得分:1)
如果mapRect的值为零,MKMapRectUnion究竟是如何计算的?
apple docs说:
如果任一矩形为null,则此方法返回另一个矩形。 返回矩形的原点设置为较小的 两个矩形的x和y值。同样,大小和 通过取最大x和y来计算矩形的宽度 值并减去新原点的x和y值。
如何计算,您可以询问苹果工程师或对mapkit进行逆向工程。如果该功能确实可以正常工作,那么你就没有这么长的时间并转移到真正的作业中。