2013-10-29 28 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

相關問題