Получение заголовка и курса устройства

Базовое Расположение поддерживает два различных способа получить связанную с направлением информацию:

Заголовок и информация о курсе не представляет ту же информацию. Заголовок устройства отражает фактическую ориентацию устройства относительно истинного северного или магнитного севера. Курс устройства представляет направление перемещения и не принимает во внимание ориентацию устройства. В зависимости от Вашего приложения Вы могли бы предпочесть один тип информации по другой или использовать комбинацию двух. Например, приложение навигации могло бы переключиться между курсом и возглавляющей информацией в зависимости от текущей скорости пользователя. При обходе скоростей, возглавляя информацию было бы более полезно для ориентации пользователя к текущей среде, тогда как в автомобиле, информация о курсе обеспечивает общее направление перемещения автомобиля.

Добавление требования для связанных с направлением событий

Если Ваше приложение для iOS запрашивает связанную с направлением информацию, чтобы функционировать должным образом, включать UIRequiredDeviceCapabilities введите приложение Info.plist файл. Этот ключ содержит массив строк, указывающих функции, которых Ваше приложение требует базового основанного на iOS устройства. App Store использует эту информацию, чтобы препятствовать тому, чтобы пользователи установили приложения на устройстве без минимальных требуемых аппаратных средств.

Для связанных с направлением событий можно связать две соответствующих строки с UIRequiredDeviceCapabilities ключ:

В обоих случаях также включайте location-services строка в массиве. Для получения дополнительной информации о UIRequiredDeviceCapabilities ключ, посмотрите информационную Ключевую Ссылку Списка свойств.

Получение связанных с заголовком событий

Возглавляющие события доступны приложениям, работающим на устройстве, содержащем магнитометр. Магнитометр измеряет соседние магнитные поля, происходящие от Земли, и использует их для определения точной ориентации устройства. Несмотря на то, что магнитометр может быть затронут локальными магнитными полями, такими как те, которые происходят от фиксированных магнитов, найденных в динамиках, двигателях и многих других типах электронных устройств, Базовое Расположение достаточно умно для отфильтровывания полей, перемещающихся с устройством.

О заголовке значений можно сообщить относительный или на магнитный северный или истинный север на карте. Магнитный север представляет точку на поверхности Земли, от которой выделяется магнитное поле планеты. Это расположение не является тем же как Северным полюсом, представляющим истинный север. В зависимости от расположения устройства магнитный север может быть достаточно хорошим во многих целях, но чем ближе к полюсам Вы добираетесь, тем менее полезный это значение становится.

Получить возглавляющие события:

  1. Создайте a CLLocationManager объект.

  2. Определите, доступны ли возглавляющие события путем вызова headingAvailable метод класса.

  3. Присвойте делегата в менеджере расположения объект.

  4. Если Вы хотите истинные северные значения, запустите службы определения местоположения.

  5. Вызовите startUpdatingHeading метод для начала поставки возглавляющих событий.

Перечисление 3-1 показывает пользовательский метод, конфигурирующий менеджера расположения и запускающий поставку возглавляющих событий. В этом случае объект является контроллером представления, выводящим на экран текущий заголовок пользователю. Поскольку контроллер представления выводит на экран истинное северное значение заголовка, он запускает обновления информации о местоположении в дополнение к заголовку обновлений.

Перечисление 3-1  , Инициирующее поставку возглавляющих событий

- (void)startHeadingEvents {
   if (!self.locManager) {
      CLLocationManager* theManager = [[[CLLocationManager alloc] init] autorelease];
 
      // Retain the object in a property.
      self.locManager = theManager;
      locManager.delegate = self;
   }
 
   // Start location services to get the true heading.
   locManager.distanceFilter = 1000;
   locManager.desiredAccuracy = kCLLocationAccuracyKilometer;
   [locManager startUpdatingLocation];
 
   // Start heading updates.
   if ([CLLocationManager headingAvailable]) {
      locManager.headingFilter = 5;
      [locManager startUpdatingHeading];
   }
}

Объект, который Вы присваиваете свойству делегата, должен соответствовать CLLocationManagerDelegate протокол. Когда новое событие заголовка поступает, менеджер расположения вызовы объектов locationManager:didUpdateHeading: метод для поставки того события приложению. После получения нового события проверьте headingAccuracy свойство, чтобы гарантировать, что данные Вы просто получили, допустимо, как показано в Перечислении 3-2. Кроме того, при использовании значения заголовка истины также проверьте, содержит ли оно допустимое значение перед использованием его.

  События заголовка Обработки перечисления 3-2

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
   if (newHeading.headingAccuracy < 0)
      return;
 
   // Use the true heading if it is valid.
   CLLocationDirection  theHeading = ((newHeading.trueHeading > 0) ?
            newHeading.trueHeading : newHeading.magneticHeading);
 
   self.currentHeading = theHeading;
   [self updateHeadingDisplays];
}

Получение информации курса, в то время как перемещается пользователь

Устройства, включающие аппаратные средства GPS, могут генерировать информацию, представляющую текущий курс и скорость устройства. Информация о курсе указывает направление, в котором устройство перемещает и не обязательно отражает ориентацию самого устройства. В результате информация о курсе прежде всего предназначается для приложений, предоставляющих информацию навигации, в то время как перемещается пользователь.

Фактическая информация о курсе и скорости возвращается к Вашему приложению в том же CLLocation объекты Вы используете для получения позиции пользователя. При запуске обновлений информации о местоположении Базовое Расположение автоматически обеспечивает курс и информацию о скорости, когда это доступно. Платформа использует входящие события расположения для вычислений текущего направления движения. Для получения дополнительной информации о том, как запустить обновления информации о местоположении, посмотрите Получение Расположения Пользователя.