iPhone - MKOverlay и MKOverlayView логика - PullRequest
0 голосов
/ 29 августа 2011

Интересно, может быть, кто-то мог бы объяснить меня простыми словами лучше, чем док ...

Когда вы хотите добавить наложение на MKMapView, вы сначала добавляете что-то, что следует протоколу MKOverlay.

Затем вызывается (MKOverlayView*)mapView:(MKMapView*)mapView viewForOverlay:(id)overlay, и вы должны вернуть MKOverlayView или что-то, что его наследует.

Какова роль наложения, добавленного в addOverlay, поскольку он ничего не отображает? Почему бы не добавить подпредставление напрямую, как это делается с помощью addSubview для представлений, и поместить «внутри него» необходимые переменные для отображения? Зачем работать с таким двухэтапным процессом?

1 Ответ

4 голосов
/ 29 августа 2011

В шаблоне модель-представление-контроллер (MVC) объекты, хранящие данные, изолированы от объектов, которые обрабатывают представление: роль объекта, реализующего MKOverlay, заключается в управлении хранением данных, а также рольобъекта MKOverlayView - для обработки представления на карте.

Например, у вас может быть объект ApartmentBuilding, который хранит данные об арендаторах, арендной плате, налогах на недвижимость и т. д., и вы можете захотеть использоватьэтот объект в приложении, которое отображает вашу империю недвижимости на карте - но вы можете также хотеть использовать те же данные ApartmentBuilding в приложении, которое рассчитывает ваш налоговый счет, или которое создает календарь запланированныхобслуживание.

Если код, который моделирует ваш ApartmentBuilding, четко отделен от кода, который отображает ваше здание на карте, то вы можете связать свою модель ApartmentBuilding с другим объектом вида - a MaintenanceCalendarView, скажем, или TaxSpreadsheetView - и ваш код легче поддерживать и повторно использовать.

...