2016-09-15 8 views
1

Я пытаюсь найти способ показать направление пользователя на карте с помощью MapKit. Настраиваемый способ MapKit, который всегда поворачивает всю карту. Поскольку позиция пользователя также является MKAnnotationView, я решил создать определенный класс, чтобы переопределить его и использовать определенное изображение (со стрелкой).Как повернуть пользовательский образ UserLocationAnnotationView с помощью MapKit в swift?

class UserLocationAnnotationView: MKAnnotationView { 

override init(frame: CGRect) { 
    super.init(frame: frame) 
} 

override init(annotation: MKAnnotation!, reuseIdentifier: String!) { 

    super.init(annotation: annotation, reuseIdentifier: reuseIdentifier) 

    var frame = self.frame 
    frame.size = CGSizeMake(130, 130) 
    self.frame = frame 
    self.backgroundColor = UIColor.clearColor() 
    self.centerOffset = CGPointMake(-30, -50) 

} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder)! 
} 

/* 
// Only override drawRect: if you perform custom drawing. 
// An empty implementation adversely affects performance during animation. 
*/ 
override func drawRect(rect: CGRect) { 
    // Drawing code 
    UIImage(named: "userLocation.png")?.drawInRect(CGRectMake(65, 65, 65, 65)) 


} 

Сейчас я пытаюсь найти способ, чтобы повернуть что MKAnnotationView изображение в didUpdateHeading FUNC в locationManager.

class ViewController: UIViewController, MKMapViewDelegate, CLLocationManagerDelegate { 

var userLocationView :MKAnnotationView? 

func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) { 
    print(newHeading.magneticHeading) 
} 

Отпечаток новогоHeading.magneticHeading работает, и это довольно точно. Теперь, как я могу повернуть пользовательский UserLocationAnnotationView?

Благодарим за помощь.

ответ

2

На данный момент я не могу дать вам полные примеры кода, но я надеюсь, что смогу дать вам несколько указателей, чтобы продолжить.

Во-первых, я не думаю, что вам обязательно понадобится подкласс MKAnnotationView. Вы можете просто присвоить свой UIImage своей собственности image. Я думаю, что это упростит ситуацию, если вы не потребуете настройки.

Теперь, я полагаю, вы успешно добавили аннотацию к карте и ссылаетесь на нее.

Чтобы повернуть индикатор заголовка, я вижу три варианта:

  1. Поворот MKAnnotationView «s image свойство:
    • Метод: При изменении товарной позиции, создать повернутую копию UIImage и присвойте его image. Example (не проверено).
    • Con: Невозможно легко анимировать поворот.
  2. Поворот MKAnnotationView сам: Метод
    • : При изменении товарной позиции, используйте MKAnnotationView 'S/UIView' s transform свойства. Присвойте ему CGAffineTransform.
    • Pro: Самый простой
    • Con: Также поворачивает представления деталей/выносок. Если вам это нужно, это не будет для вас вариантом.
  3. Поместите UIImage в UIImageView и add that one as a subview к MKAnnotationView:
    • Метод: Подобно 2. но использовать transform свойство на UIImageView непосредственно не на самом MKAnnotationView. Таким образом, выноски не поворачиваются.
    • Pro: Должен хорошо работать.
    • Con: Немного больше работы.

Что вы также должны:

  • Функция для преобразования из градусов в радианы. Аффинные преобразования требуют радианов.
  • Если вы хотите анимировать вращение (за исключением 1.) завернуть изменения в transform собственности в статическогоanimate метода UIView «s.
+0

Большое спасибо @Arthur! Даже если вы не дали никакого кода, который вы ответили точно, и с помощью разных методов я нашел способ заставить его работать. Я решил использовать второй метод, так как мне не нужен какой-либо вид выноски для userAnnotationView. Также последним советом по использованию метода анимации UIView была огромная помощь. Спасибо вам снова – matthioo

 Смежные вопросы

  • Нет связанных вопросов^_^