Как изменить это использовать пользовательский класс?
Вы должны понимать, что существует разница между аннотацией и аннотацией. Первый объект, связанный с некоторой точкой или областью карты. Вы добавляете аннотации к виду карты, а затем представление карты заботится о том, чтобы выяснить, когда нужно отображать определенную аннотацию, чтобы вам не приходилось беспокоиться о том, какая часть карты видна, каков уровень масштабирования, и т. д. Вы можете создавать подклассы MKAnnotation
, если вы хотите сохранить какие-то пользовательские данные в самой аннотации. Например, существует подкласс MKUserAnnotation
, который добавляет свойство heading
; вы можете сделать то же самое в своем подклассе аннотации.
Аннотации вид обеспечивает визуальное представление аннотации. Вид карты может содержать сотни или тысячи аннотаций, но обычно в любой момент времени их нужно будет отобразить только в нескольких экземплярах. Когда представление карты хочет отобразить аннотацию, оно вызывает метод делегата mapView(_:viewFor:)
, и делегат возвращает соответствующий аннотационный вид, настроенный для данной аннотации. Если вы хотите использовать свой собственный подкласс MKAnnotationView
, как указывает ваш заголовок вопроса, тогда вы должны реализовать mapView(_:viewFor:)
в своем делете делегата на карте, чтобы он создавал экземпляр вашего пользовательского подкласса MKAnnotationView
, настраивая его и возвращает его.
* Перед вашей карты зрения делегат фактически создает новый вид аннотаций, вы должны вызвать метод dequeueReusableAnnotationView(withIdentifier:)
вид карты, которая может возвратить представление, которое можно использовать вместо создания нового. Повторное использование аннотаций очень похоже на то, как UITableView
повторно использует ячейки таблицы; в обоих случаях идея состоит в том, чтобы избежать постоянного создания и уничтожения недолговечных просмотров. Все это объясняется в документах, поэтому посмотрите там полное объяснение.
Спасибо много для подробного объяснения. Позвольте мне переварить все это, и, возможно, я смогу реализовать. –