2013-10-29 27 views
1

我有一个设计问题。这是我想要做的:我想限制MKMapView到一个特定的区域,同时使它成为一个想要实际使用地图的视图控制器的抽象。子类MKMapView,并使其mapview委托,同时仍允许其他代理

为了限制地图视图,我很可能想要使用委托方法mapView:regionDidChangeAnimated:,并获取变更的通知,并在区域超出我的预定区域时将地图移回。但是,因为我想使它足够通用,所以我不希望代码在视图控制器中。我想我可能想要改为MKMapView的子类。

如果我这样做,我会的MKMapView一个子类(比方说,一个ConstraintMapView类),这也是MKMapView委托和公开的方法对区域约束的类的任何用户。但是这个类的用户(比如一个视图控制器)也可能是MKMapView的代表,所以我也想把所有委托消息转发给视图控制器。

要做到这一点,我需要一个指向真正委托(视图控制器)的委托财产,但在我ConstriantMapView如果我有一个意思,我重写MKMapView的setter和getter到委托和事情变得有点复杂,因为在MKMapView它可以调用ConstraintMapView的方法,我会给它视图控制器,但我真的想给它ConstraintMapView而不是。

  1. 有没有办法使这项工作?
  2. 对于将控制器从将视图移回到约束区域的本质而言,是否有更好的模式?

回答

1

我在这个项目中做了类似的代理MKMapViewDelegate;检查出来:

https://github.com/mapbox/mbxmapkit

+0

哦你好,我也不时发布在MapBox论坛上。实际上,我现在试图使用MBTiles的本地SDK,现在iOS7可以轻松地将地图加载到它上面。所以对于MBXMapKit,你只是在你的MKMapView子类中重写setDelegate,但不覆盖getter?你如何确定MKMapView何时需要发送消息给它的委托,它不会直接发送给真正的委托并绕过你的'MBXMapViewDelegate'? – huggie

+0

我想我开始明白了。真棒解决方案。 – huggie

+0

使用NSProxy代替和使用NSObject有什么区别?由于'forwardInvocation:'和'methodSignatureForSelector'似乎也适用于NSObject吗? – huggie

相关问题