MKAnnotationView
MKAnnotationView
класс ответственен за представление аннотаций визуально в представлении карты. Представления аннотации слабо связываются к соответствующему объекту пометок, который является объектом, соответствующим MKAnnotation
протокол. Когда координатная точка аннотации находится в видимой области, представление карты просит, чтобы его делегат обеспечил соответствующее представление аннотации. Представления аннотации могут быть переработаны позже и помещены в очередь повторного использования, сохраняющуюся представлением карты.
Самый эффективный способ обеспечить содержание для представления аннотации состоит в том, чтобы установить image
свойство. Размеры представления аннотации самостоятельно автоматически к изображению Вы указываете, и рисует то изображение для его содержания. Поскольку это - представление, однако, Вы могли также переопределить drawRect:
метод и рисует содержание Вашего представления вручную. Если Вы принимаете решение переопределить drawRect:
непосредственно и Вы не указываете пользовательское изображение в image
свойство, знать, что ширина и высота кадра представления аннотации установлены в 0 по умолчанию. Прежде чем Ваше пользовательское содержание может быть нарисовано, необходимо установить ширину и высоту к ненулевым значениям путем изменения представления frame
свойство. В целом, если Ваше содержание состоит полностью из статических изображений, более эффективно установить image
свойство и изменение это по мере необходимости, чем нарисовать изображения самостоятельно.
Представления аннотации остаются привязанными на карте в точке, указанной их связанным объектом пометок. Несмотря на то, что они прокручивают с содержанием карты, представления аннотации находятся в отдельном уровне дисплея и не масштабируются, когда изменяется размер видимой области карты.
Представления аннотации поддерживают понятие состояния выбора, определяющего, отменяется ли представление, выбирается или выбирается и отображение стандартного представления выноски. Пользователь переключается между состояниями выбора через взаимодействия с представлением аннотации. В отменявшем состоянии представление аннотации выведено на экран, но не выделено. В выбранном состоянии выделяется аннотация, но выноска не выведена на экран. И наконец, аннотация может быть выведена на экран и с выделением и с выноской. Представление выноски выводит на экран дополнительную информацию, такую как строка заголовка и средства управления для просмотра большей информации. Информация заголовка предоставлена объектом пометок, но Ваше представление аннотации ответственно за обеспечение любых пользовательских элементов управления. Для получения дополнительной информации посмотрите примечания разделения на подклассы.
Многократное использование представлений аннотации
Представления аннотации разработаны, чтобы быть снова использованными, поскольку пользователь (или Ваше приложение) изменяет видимую область карты. Повторное использование представлений аннотации обеспечивает значительные повышения производительности во время прокрутки путем предотвращения создания новых объектов представления в это время критическая работа. Поэтому представления аннотации не должны быть сильно связаны к содержанию их связанной аннотации. Вместо этого должно быть возможно использовать свойства представления аннотации (или методы установщика) для конфигурирования представления для нового объекта пометок.
Каждый раз, когда Вы инициализируете новое представление аннотации, необходимо всегда указывать идентификатор повторного использования для того представления. Поскольку представления аннотации больше не необходимы, представление карты может поместить их в очередь повторного использования. Поскольку новые аннотации добавляются к представлению карты, объект делегата может тогда исключить из очереди и реконфигурировать существующее представление (а не создать новое), использование dequeueReusableAnnotationViewWithIdentifier:
метод MKMapView
.
Разделение на подклассы примечаний
Можно использовать MKAnnotationView
класс, как или разделяют его на подклассы для обеспечения пользовательского поведения по мере необходимости. image
свойство класса позволяет, Вы установить появление аннотации просматриваете, не разделяя на подклассы непосредственно. Вы могли бы также создать пользовательские подклассы как удобство и использовать их для помещения представления аннотации в известное состояние. Например, MKPinAnnotationView
подкласс инициализирует содержание представления аннотации к изображению контакта.
Нет никаких особых требований для разделения на подклассы MKAnnotationView
. Однако следующий список включает некоторые причины, которые Вы могли бы хотеть разделить на подклассы и некоторые методы, которые Вы переопределите для реализации желаемого поведения:
Для помещения представления аннотации в непротиворечивое состояние обеспечьте пользовательский метод инициализации. Ваш пользовательский метод инициализации тогда вызвал бы
initWithAnnotation:reuseIdentifier:
инициализировать суперкласс.Для обеспечения пользовательских представлений выноски переопределите
leftCalloutAccessoryView
метод и использование это для возврата представлений.
При поддержке перемещаемых представлений аннотации в iOS 4.0 и позже подкласс ответственен за изменение значения в dragState
свойство к надлежащим значениям в ключевых точках перехода в работе перетаскивания. Для получения дополнительной информации см. описание того свойства.
Наследование
-
NSObject
-
NSResponder
-
NSView
-
MKAnnotationView
-
MKPinAnnotationView
-
NSObject
-
NSResponder
-
NSView
-
MKAnnotationView
-
MKPinAnnotationView
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSAccessibility
-
NSAccessibilityElementProtocol
-
NSAnimatablePropertyContainer
-
NSAppearanceCustomization
-
NSCoding
-
NSDraggingDestination
-
NSObjectProtocol
-
NSUserInterfaceItemIdentification
-
Печатаемый
-
Reflectable
-
NSAccessibility
-
NSAccessibilityElement
-
NSAnimatablePropertyContainer
-
NSAppearanceCustomization
-
NSCoding
-
NSDraggingDestination
-
NSObject
-
NSUserInterfaceItemIdentification
Оператор импорта
Swift
import MapKit
Objective C
@import MapKit;
Доступность
Доступный в OS X v10.9 и позже.
-
Инициализирует и возвращает новое представление аннотации.
Объявление
Swift
init!(annotation
annotation
: MKAnnotation!, reuseIdentifierreuseIdentifier
: String!)Objective C
- (instancetype)initWithAnnotation:(id<MKAnnotation>)
annotation
reuseIdentifier:(NSString *)reuseIdentifier
Параметры
annotation
Объект пометок для соединения с новым представлением.
reuseIdentifier
Если Вы планируете снова использовать представление аннотации для подобных типов аннотаций, передайте строку для идентификации его. Несмотря на то, что можно передать
nil
если Вы не намереваетесь снова использовать представление, многократное использование представлений аннотации обычно рекомендуется.Возвращаемое значение
Инициализированное представление аннотации или
nil
если была проблема, инициализирующая объект.Обсуждение
Идентификатор повторного использования обеспечивает способ для Вас улучшить производительность путем переработки представлений аннотации, когда они прокручиваются на и прочь карты. Поскольку представления больше не необходимы, они перемещены к очереди повторного использования представлением карты. Когда новая аннотация становится видимой, Ваше приложение может запросить представление на ту аннотацию путем передачи надлежащей строки идентификатора повторного использования
dequeueReusableAnnotationViewWithIdentifier:
методMKMapView
.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Вызванный, когда представление удалено из очереди повторного использования.
Объявление
Swift
func prepareForReuse()
Objective C
- (void)prepareForReuse
Обсуждение
Реализация по умолчанию этого метода ничего не делает. Можно переопределить его в пользовательских представлениях аннотации и использовать его для помещения представления в известное состояние, прежде чем это будет возвращено делегату представления карты.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
См. также
dequeueReusableAnnotationViewWithIdentifier:
(MKMapView)
-
включенный включенный
СвойствоБулево значение, указывающее, включена ли аннотация.
Объявление
Swift
var enabled: Bool
Objective C
@property(nonatomic, getter=isEnabled) BOOL enabled
Обсуждение
Значение по умолчанию этого свойства
YES
true
. Если значение этого свойстваNO
false
, представление аннотации игнорирует сенсорные события и не может быть выбрано. Подклассы могут также вывести на экран содержание аннотации по-другому в зависимости от значения этого свойства.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
изображение изображение
СвойствоИзображение, которое будет выведено на экран представлением аннотации.
Обсуждение
Присвоение нового изображения к этому свойству также изменяет размер кадра представления так, чтобы это соответствовало ширину и высоту нового изображения. Позиция кадра представления не изменяется.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
выделенный выделенный
СвойствоБулево значение, указывающее, выделяется ли представление аннотации.
Объявление
Swift
var highlighted: Bool
Objective C
@property(nonatomic, getter=isHighlighted) BOOL highlighted
Обсуждение
Вы не должны устанавливать значение этого свойства непосредственно. Представление карты устанавливает его в ответ на сенсорные события, входящие или выходящие из границ представления аннотации.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Объект пометок в настоящее время связывался с представлением.
Объявление
Swift
var annotation: MKAnnotation!
Objective C
@property(nonatomic, strong) id< MKAnnotation > annotation
Обсуждение
Вы не должны изменять значение этого свойства непосредственно. Это свойство содержит не -
nil
оцените только, в то время как представление аннотации видимо на карте. Если представление ставится в очередь и ожидающий, чтобы быть снова использованным, значениеnil
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
centerOffset centerOffset
СвойствоСмещение (в пикселях), в котором можно вывести на экран представление.
Обсуждение
По умолчанию центральная точка представления аннотации помещается в координатную точку связанной аннотации. Можно использовать это свойство, чтобы изменить местоположение представления аннотации по мере необходимости. Эти значения смещения x и y измеряются в пикселях. Положительные значения смещения перемещают представление аннотации вниз и вправо, в то время как отрицательные величины повышают его и налево.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
calloutOffset calloutOffset
СвойствоСмещение (в пикселях), в котором можно поместить пузырь выноски.
Обсуждение
Это свойство определяет дополнительное расстояние, которым можно переместить пузырь выноски. Когда это свойство установлено в (0, 0), точка привязки пузыря выноски помещается в главную центральную точку кадра представления аннотации. Указание положительных значений смещения перемещает пузырь выноски вниз и вправо при указании, что отрицательные величины повышают его и налево.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
reuseIdentifier reuseIdentifier
СвойствоСтрока, идентифицирующая то это представление аннотации, является допускающей повторное использование. (только для чтения)
Объявление
Swift
var reuseIdentifier: String! { get }
Objective C
@property(nonatomic, readonly) NSString *reuseIdentifier
Обсуждение
Вы указываете идентификатор повторного использования при создании представления. Вы используете этот тип позже для получения представления аннотации, создававшегося ранее, но которое в настоящее время не использовано, потому что его аннотация не находится на экране.
При определении отчетливо различных типов аннотаций (с отчетливо различными представлениями аннотации для движения с ними), можно дифференцироваться между типами аннотации путем указания различных идентификаторов повторного использования для каждого.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Устанавливает состояние выбора представления аннотации.
Объявление
Swift
func setSelected(_
selected
: Bool, animatedanimated
: Bool)Objective C
- (void)setSelected:(BOOL)
selected
animated:(BOOL)animated
Параметры
selected
Содержит значение
YES
true
если представление должно вывести на экран себя, как выбрано.animated
Набор к
YES
true
если анимировано изменение в состоянии выбора.Обсуждение
Вы не должны вызывать этот метод непосредственно.
MKMapView
вызовы объектов этот метод в ответ на взаимодействие с пользователем с аннотацией.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
См. также
selectAnnotation:animated:
(MKMapView) -
Булево значение, указывающее, выбирается ли в настоящее время представление аннотации.
Объявление
Swift
var selected: Bool
Objective C
@property(nonatomic, getter=isSelected) BOOL selected
Обсуждение
Вы не должны устанавливать значение этого свойства непосредственно. Если свойство содержит
YES
true
, представление аннотации выводит на экран пузырь выноски.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
canShowCallout canShowCallout
СвойствоБулево значение, указывающее, в состоянии ли представление аннотации вывести на экран дополнительную информацию в пузыре выноски.
Объявление
Swift
var canShowCallout: Bool
Objective C
@property(nonatomic) BOOL canShowCallout
Обсуждение
Если значение этого свойства
YES
true
, когда пользователь касается выбранного представления аннотации, стандартный пузырь выноски показан. Выноска использует заголовок и текст подзаголовка от связанного объекта пометок. Если нет никакого текста заголовка, тем не менее, представление аннотации обрабатывается как будтоenabled
свойство установлено вNO
false
. Выноска также выводит на экран любые пользовательские представления выноски, сохраненные вleftCalloutAccessoryView
иrightCalloutAccessoryView
свойства.Если значение этого свойства
NO
false
, значение заголовка и строк подзаголовка проигнорировано, и представление аннотации остается включенным по умолчанию. Можно все еще отключить представление явно с помощьюenabled
свойство.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Представление для отображения на левой стороне стандартного пузыря выноски.
Объявление
Swift
var leftCalloutAccessoryView: NSView!
Objective C
@property(strong, nonatomic) NSView *leftCalloutAccessoryView
Обсуждение
Значение по умолчанию этого свойства
nil
. Левое представление выноски обычно используется, чтобы вывести на экран информацию об аннотации или соединиться с пользовательской информацией, предоставленной Вашим приложением.Если представление также потомком, которое Вы указываете является
UIControl
когда управление касается, класс, можно использовать делегата представления карты для получения уведомлений. Если это не убывает отUIControl
, Ваше представление ответственно за обработку любых сенсорных событий в ее границах.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
См. также
-
Представление для отображения на правой стороне стандартного пузыря выноски.
Объявление
Swift
var rightCalloutAccessoryView: NSView!
Objective C
@property(strong, nonatomic) NSView *rightCalloutAccessoryView
Обсуждение
Это свойство установлено в
nil
по умолчанию. Правильное представление выноски обычно используется для соединения с более подробной информацией об аннотации. Общее представление для указания для этого свойстваUIButton
возразите, чей тип установлен вUIButtonTypeDetailDisclosure
.Если представление также потомком, которое Вы указываете является
UIControl
когда управление касается, класс, можно использовать делегата представления карты для получения уведомлений. Если это не убывает отUIControl
, Ваше представление ответственно за обработку любых сенсорных событий в ее границах.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
См. также
-
перемещаемый перемещаемый
СвойствоБулевская переменная, указывающая, перемещаемо ли представление аннотации.
Объявление
Swift
var draggable: Bool
Objective C
@property(nonatomic, getter=isDraggable) BOOL draggable
Обсуждение
Установка этого свойства к
YES
true
делает аннотацию перемещаемой пользователем. ЕслиYES
true
, связанный объект пометок должен также реализоватьsetCoordinate:
метод. Значение по умолчанию этого свойстваNO
false
.Установка этого свойства к
YES
true
, позволяет карте просмотреть, знают, что аннотация всегда перемещаема. Другими словами, Вы не можете conditionalize перетаскивать операции путем попытки остановить уже инициировавшуюся работу; выполнение так может привести к неопределенному поведению. После того, как начатый, работа перетаскивания должна всегда продолжаться к завершению.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Устанавливает текущее состояние перетаскивания для представления аннотации.
Объявление
Swift
func setDragState(_
newDragState
: MKAnnotationViewDragState, animatedanimated
: Bool)Objective C
- (void)setDragState:(MKAnnotationViewDragState)
newDragState
animated:(BOOL)animated
Параметры
newDragState
Новое перетаскивание утверждает для представления аннотации.
animated
Если
YES
true
, изменение в новом состоянии перетаскивания должно быть анимировано; иначе, это должно быть сделано без анимаций.Обсуждение
Приложения, предназначающиеся для iOS 4.2 и позже, могут переопределить этот метод и использовать, это для реализации перетаскивает поддержку пользовательских представлений аннотации. Поскольку система обнаруживает пользовательские действия, которые указали бы перетаскивание, она вызывает этот метод для обновления состояния перетаскивания. В ответ на эти изменения Ваша пользовательская реализация этого метода должна сделать следующее:
Когда изменения состояния перетаскивания к
MKAnnotationViewDragStateStarting
, установите состояние вMKAnnotationViewDragStateDragging
. Если Вы выполняете анимацию для указания начала перетаскивания, иanimated
параметрYES
true
, выполните ту анимацию прежде, чем изменить состояние.Когда изменения состояния к также
MKAnnotationViewDragStateCanceling
илиMKAnnotationViewDragStateEnding
, установите состояние вMKAnnotationViewDragStateNone
. Если Вы выполняете анимацию в конце перетаскивания, иanimated
параметрYES
true
, необходимо выполнить ту анимацию прежде, чем изменить состояние.
Реализация по умолчанию этого метода устанавливает значение
dragState
свойство к значению вnewDragState
параметр только. Поэтому прямые подклассы могут просто вызвать наследованную версию этого метода для изменения состояния перетаскивания; иначе, просто измените значение вdraggable
свойство непосредственно.Изменение состояния к
MKAnnotationViewDragStateDragging
илиMKAnnotationViewDragStateNone
способ сигнализировать к представлению карты, что Вы сделаны с любыми анимациями, которые Вы хотели выполнить. Например, когда работа перетаскивания начинается для аннотации контакта,MKPinAnnotationView
класс выполняет анимацию для подъема контакта от карты. Точно так же, когда контакт отбрасывается, класс выполняет анимацию отбрасывания. Даже если Вы не выполняете анимаций, необходимо вызвать наследованную версию этого метода для обновленияdragState
свойство.Вы не должны пытаться прервать новую работу перетаскивания путем изменения состояния от
MKAnnotationViewDragStateStarting
кMKAnnotationViewDragStateNone
. Если Вы не хотите, чтобы Ваше представление аннотации было перемещаемо, установитеdraggable
свойство кNO
false
.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
Текущее состояние перетаскивания представления аннотации.
Объявление
Swift
var dragState: MKAnnotationViewDragState
Objective C
@property(nonatomic) MKAnnotationViewDragState dragState
Обсуждение
Приложения, предназначающиеся для iOS 4.1 и ранее, могут использовать это свойство для поддержки, перетаскивают операции в пользовательских представлениях аннотации. Если Ваше выполнение приложения в iOS 4.2 или позже, необходимо переопределить
setDragState:animated:
метод и использование это для управления перетаскиванием утверждает вместо этого.Для поддержки перетаскивают операции, необходимо переопределить реализацию этого свойства и обновить состояние перетаскивания в следующие разы:
Когда изменения состояния перетаскивания к
MKAnnotationViewDragStateStarting
, необходимо установить состояние вMKAnnotationViewDragStateDragging
. При выполнении анимации для указания начала перетаскивания, необходимо выполнить ту анимацию прежде, чем изменить состояние. Изменение состояния к новому значению позволяет карте знать, что сделаны Ваши анимации.Когда изменения состояния к также
MKAnnotationViewDragStateCanceling
илиMKAnnotationViewDragStateEnding
, установите состояние вMKAnnotationViewDragStateNone
. При выполнении анимации в конце перетаскивания необходимо выполнить ту анимацию прежде, чем изменить состояние.
Изменение состояния к
MKAnnotationViewDragStateDragging
илиMKAnnotationViewDragStateNone
значение является способом сигнализировать к представлению карты, что Вы сделаны с любыми анимациями, которые Вы хотели выполнить. Например, когда работа перетаскивания начинается для аннотации контакта,MKPinAnnotationView
класс выполняет анимацию для подъема контакта от карты. Точно так же, когда контакт отбрасывается, класс выполняет анимацию отбрасывания. Даже если Вы не выполняете анимаций, необходимо все еще изменить значение этого свойства для отражения корректного состояния.Вы не должны пытаться прервать новую работу перетаскивания путем изменения состояния от
MKAnnotationViewDragStateStarting
кMKAnnotationViewDragStateNone
. Если Вы не хотите, чтобы Ваше представление аннотации было перемещаемо, установитеdraggable
свойство кNO
false
.Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
См. также
-
Эти константы указывают текущее состояние перетаскивания представления аннотации.
Объявление
Swift
enum MKAnnotationViewDragState : UInt { case None case Starting case Dragging case Canceling case Ending }
Objective C
typedef enum MKAnnotationViewDragState { MKAnnotationViewDragStateNone = 0, MKAnnotationViewDragStateStarting, MKAnnotationViewDragStateDragging, MKAnnotationViewDragStateCanceling, MKAnnotationViewDragStateEnding } MKAnnotationViewDragState;
Константы
-
None
MKAnnotationViewDragStateNone
Представление не вовлечено в работу перетаскивания. Когда перетаскивание заканчивается или отменяется, представление аннотации ответственно за возврат себя к этому состоянию.
Доступный в OS X v10.9 и позже.
-
Starting
MKAnnotationViewDragStateStarting
Действие произошло, который указал, что представление должно начать перетаскивать. Представление карты автоматически перемещает представления аннотации в это состояние в ответ на надлежащие пользовательские действия.
Доступный в OS X v10.9 и позже.
-
Dragging
MKAnnotationViewDragStateDragging
Представление посреди работы перетаскивания и отслеживает прогресс.
Доступный в OS X v10.9 и позже.
-
Canceling
MKAnnotationViewDragStateCanceling
Действие произошло, который указал, что представление должно отменить работу перетаскивания. Можно поместить представление аннотации в это состояние для прерывания работы.
Доступный в OS X v10.9 и позже.
-
Ending
MKAnnotationViewDragStateEnding
Действие произошло, который указал, что представление было отброшено пользователем. Представление карты автоматически перемещает представления аннотации в это состояние в ответ на надлежащие пользовательские действия.
Доступный в OS X v10.9 и позже.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.
-
-
Уведомляет наблюдателей что заголовок или информация о подзаголовке измененного объекта пометок.
Используйте уведомления KVO вместо этого.
Это уведомление поддерживает унаследованные приложения и больше не необходимо. MapKit отслеживает изменения в заголовке и подзаголовке аннотации с помощью уведомлений KVO.
Оператор импорта
Objective C
@import MapKit;
Swift
import MapKit
Доступность
Доступный в OS X v10.9 и позже.