как изменить изображение по умолчанию в аннотации MKUserLocation в Swift iOS

#ios #swift #mkmapview #mkannotation #mkannotationview

#iOS #swift #mkmapview #mkannotation #mkannotationview

Вопрос:

В моем приложении есть вид карты, который отображает местоположение пользователя. при нажатии на местоположение пользователя отображается изображение, как показано ниже:

введите описание изображения здесь

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

аналогично тому, как карты Apple отображают изображение вашего профиля в точке вашего местоположения.

как я могу это сделать здесь?

вот мой код:

  func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
       if annotation is MKUserLocation {
        print("user location image tapped")
        
           return nil
       }

       let reuseId = "pin"
       var pinView = mapView.dequeueReusableAnnotationView(withIdentifier: reuseId) as? MKPinAnnotationView
       if pinView == nil {
           pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: reuseId)
           pinView?.animatesDrop = true
           pinView?.canShowCallout = true
           pinView?.isDraggable = true
        
         //  pinView?.pinColor = .purple

           let rightButton: AnyObject! = UIButton(type: UIButton.ButtonType.detailDisclosure)
           pinView?.rightCalloutAccessoryView = rightButton as? UIView
   
       }
       else {
           pinView?.annotation = annotation
       }
       
       return pinView
   }
  

любая помощь по этому поводу? Спасибо.

Комментарии:

1. вы написали сами или скопировали где-нибудь? не поймите меня неправильно, но есть некоторые нулевые элементы управления, о которых я понятия не имею, можете ли вы объяснить подробнее. почему вы использовали MKPinAnnotation, а не MKAnnotationView?

2. потому что с MKPinAnnotation у меня могут быть всплывающие окна, которые предоставляют пользователю более подробную информацию, которую MKAnnotationView не поддерживает. но здесь это не обсуждается, что вы не понимаете в моем вопросе? @sekoyaz

3. хм, тогда попробуйте это, я добавляю, чтобы ответить, было бы полезно @mike

Ответ №1:

 let imageView = UIImageView(frame: CGRect(0, 0, 25, 25))
imageView.image = UIImage(named: "userpic");
imageView.layer.cornerRadius = imageView.layer.frame.size.width / 2
imageView.layer.masksToBounds = true
anotationView.frame = imageView.frame
  

Комментарии:

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

2. в представлении аннотации есть рамка, мой друг, а значение по умолчанию равно 0: l

3. куда бы я поместил приведенный выше код в моем сегменте кода? потому что он показывает мне ошибки и говорит, что у него нет фрейма. вы кодируете вообще или вы кодируете это в рамках моей функции MapView?

4. да, в этом проблема, куда мне поместить приведенный выше код? у меня есть несколько функций mapview, куда бы я поместил этот код для достижения того, что мне нужно? Спасибо

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