我混合了MKCircle
,MKPolygon
和MKPolyline
叠加层,我想按特定顺序显示。这些叠加层并不总是同时创建,但是当它们被创建时,它们应出现在其他叠加层的下方/上方。
[self.mapview insertOverlay:example1 atIndex:6];
将叠加层放在列表的末尾但不是第6层,如果在它看起来像3号时只有2个叠加层。我想将叠加层推到正确的层
[self.mapview insertOverlay:example2 atIndex:5];
这个我想要高于example1但是因为那个得到3,所以example2现在位于底部。
我正在考虑检查创建了哪些叠加层,然后创建一个数组并用addOverlays
推送所有叠加层,不确定它会给它带来多少性能影响。
他们是否有任何聪明的方法可以实现这一目标?
欢呼,tord答案 0 :(得分:1)
当您需要对注释或叠加层进行更多结构化管理时,您需要考虑引入一组单独的数据结构来表示您的组织模型(类似于管理UITableView数据源的方式)。 MKMapView的辅助对象或子类可以工作;我更喜欢前者。
在您的情况下,也许一组数组可以工作。顶级数组表示每个逻辑“层”。此数组中的每个元素都是该层的叠加层数组。这些数据结构应该作为私有成员拥有助手类,以及对MKMapView对象的弱引用或出口。提供添加/删除叠加层的方法,例如addOverlay:atLayer:
和removeOverlay:
,或接受叠加数组的复数变体。辅助类首先将给定的叠加添加到适当的“层”子阵列。然后,通过将其他层上的数组的计数相加,它可以计算要在发送到MKMapView的insertOverlay:atIndex:
消息中使用的正确索引值。
我认为不会对性能或内存使用造成重大影响。
通过使用单独的辅助类而不是MKMapView的子类或将代码嵌入到视图控制器中,可以更容易地在多个视图控制器中重用它,并且单元测试也更容易。