我有一个设计问题。这是我想要做的:我想限制MKMapView
到一个特定的区域,同时使其成为想要实际使用地图的视图控制器的抽象。
为了约束地图视图,我很可能希望使用委托方法mapView:regionDidChangeAnimated:
并获得更改通知,如果该区域超出我的预定区域,则将地图移回。但是,由于我想让它足够通用,我不希望代码在视图控制器中。我想我可能想改为子类 MKMapView。
如果我这样做,我将拥有一个子类MKMapView
(例如,一个ConstraintMapView
类),它也是该类的任何用户的代表MKMapView
并公开方法以将该区域约束给该类的任何用户。但随后该类的用户(例如视图控制器)也希望成为 的委托人MKMapView
,因此我还希望将所有委托消息转发给视图控制器。
为此,我需要一个委托属性,它指向真正的委托(视图控制器),但ConstriantMapView
如果我有一个,这是否意味着我要覆盖MKMapView
委托的 setter 和 getter,事情变得有点复杂,因为在它里面MKMapView
可以调用ConstraintMapView
's 方法,我会给它视图控制器,但我真的想给它ConstraintMapView
。
- 有没有办法使这项工作?
- 是否有更好的模式可以让控制器免于将视图移回约束区域的细节?