1

我有一个设计问题。这是我想要做的:我想限制MKMapView到一个特定的区域,同时使其成为想要实际使用地图的视图控制器的抽象。

为了约束地图视图,我很可能希望使用委托方法mapView:regionDidChangeAnimated:并获得更改通知,如果该区域超出我的预定区域,则将地图移回。但是,由于我想让它足够通用,我不希望代码在视图控制器中。我想我可能想改为子类 MKMapView。

如果我这样做,我将拥有一个子类MKMapView(例如,一个ConstraintMapView类),它也是该类的任何用户的代表MKMapView并公开方法以将该区域约束给该类的任何用户。但随后该类的用户(例如视图控制器)也希望成为 的委托人MKMapView,因此我还希望将所有委托消息转发给视图控制器。

为此,我需要一个委托属性,它指向真正的委托(视图控制器),但ConstriantMapView如果我有一个,这是否意味着我要覆盖MKMapView委托的 setter 和 getter,事情变得有点复杂,因为在它里面MKMapView可以调用ConstraintMapView's 方法,我会给它视图控制器,但我真的想给它ConstraintMapView

  1. 有没有办法使这项工作?
  2. 是否有更好的模式可以让控制器免于将视图移回约束区域的细节?
4

2 回答 2

1

MKMapViewDelegate在这个项目中做了类似的代理;一探究竟:

https://github.com/mapbox/mbxmapkit

于 2013-10-29T17:04:17.227 回答
0

如果你想改正一个现有的类,你可以使用“装饰器设计模式”。这是简要说明。
http://www.raywenderlich.com/46988/ios-design-patterns
希望对您有所帮助

于 2013-10-29T05:36:25.550 回答