我有一個設計問題。這是我想要做的:我想限制MKMapView
到一個特定的區域,同時使它成爲一個想要實際使用地圖的視圖控制器的抽象。子類MKMapView,並使其mapview委託,同時仍允許其他代理
爲了限制地圖視圖,我很可能想要使用委託方法mapView:regionDidChangeAnimated:
,並獲取變更的通知,並在區域超出我的預定區域時將地圖移回。但是,因爲我想使它足夠通用,所以我不希望代碼在視圖控制器中。我想我可能想要改爲MKMapView的子類。
如果我這樣做,我會的MKMapView
一個子類(比方說,一個ConstraintMapView
類),這也是MKMapView
委託和公開的方法對區域約束的類的任何用戶。但是這個類的用戶(比如一個視圖控制器)也可能是MKMapView
的代表,所以我也想把所有委託消息轉發給視圖控制器。
要做到這一點,我需要一個指向真正委託(視圖控制器)的委託財產,但在我ConstriantMapView
如果我有一個意思,我重寫MKMapView
的setter和getter到委託和事情變得有點複雜,因爲在MKMapView
它可以調用ConstraintMapView
的方法,我會給它視圖控制器,但我真的想給它ConstraintMapView
而不是。
- 有沒有辦法使這項工作?
- 對於將控制器從將視圖移回到約束區域的本質而言,是否有更好的模式?
哦你好,我也不時發佈在MapBox論壇上。實際上,我現在試圖使用MBTiles的本地SDK,現在iOS7可以輕鬆地將地圖加載到它上面。所以對於MBXMapKit,你只是在你的MKMapView子類中重寫setDelegate,但不覆蓋getter?你如何確定MKMapView何時需要發送消息給它的委託,它不會直接發送給真正的委託並繞過你的'MBXMapViewDelegate'? – huggie
我想我開始明白了。真棒解決方案。 – huggie
使用NSProxy代替和使用NSObject有什麼區別?由於'forwardInvocation:'和'methodSignatureForSelector'似乎也適用於NSObject嗎? – huggie