有一点我想知道,也许有人可以用比文档做得更好的简单词语来解释我......
如果要在MKMapView上添加叠加层,首先要添加符合MKOverlay协议的内容。
然后,调用(MKOverlayView*)mapView:(MKMapView*)mapView viewForOverlay:(id)overlay
并且您必须返回MKOverlayView或继承它的东西。
addOverlay
中添加的叠加层的作用是什么,因为它没有显示任何内容?为什么不直接添加子视图,因为它是通过addSubview为视图完成的,并将“在其中”放入显示所需的变量?为什么运行这样一个2部分的过程?
答案 0 :(得分:4)
在model-view-controller (MVC) pattern中,存储数据的对象与处理表示的对象隔离:实现MKOverlay的对象的角色是管理数据存储,MKOverlayView对象的角色是处理表示地图。
例如,您可能有一个ApartmentBuilding
对象存储有关租户,租金,财产税等的数据,您可能希望在显示您的房地产帝国的应用中使用该对象。地图 - 但您可能 想要在计算税单的应用中使用相同的ApartmentBuilding
数据,或者生成定期维护日历。
如果为ApartmentBuilding
建模的代码与在地图上显示您的建筑物的代码完全分开,那么您可以将ApartmentBuilding
模型与不同的视图对象配对 - {{1 ,比方说,或MaintenanceCalendarView
- 您的代码更易于维护和重复使用。