Как вызвать аннотацию карты при просмотре коллекции в iOS Swift?

В своем проекте я использую карту MK и представление uicollection. В режиме просмотра карты с отображением аннотации к карте местоположения ближайших друзей пользователя на основе текущего местоположения пользователя. В представлении коллекции так же, как имя местоположения друзей пользователя и расстояние отображаются в представлении UICollection. (Примечание: для коллекции я использовал библиотеку cocopod UPCarouselFlowLayout)

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

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

func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if annotation is MKUserLocation {
        let pin = mapView.view(for: annotation) ?? MKAnnotationView(annotation: annotation, reuseIdentifier: nil)
        pin.image = UIImage(named: "carIcon")
        userPinView = pin
        return pin

    }

    let annotationIdentifier = "AnnotationIdentifier"
    var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: annotationIdentifier)

    if annotationView == nil {
        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: annotationIdentifier)
    }
    else {
        annotationView!.annotation = annotation
    }

    print("Get parking array count",parkingTypeArray.count)
    if parkingTypeArray.count > 0 {

        print("parking ty \(parkingTypeArray)")
        //

        for cameraa in parkingTypeArray.enumerated() {

            if cameraa.element == "Free" {

                let pinImage = UIImage(named: "free")
                annotationView!.image = pinImage

            }else if cameraa.element == "Paid" {

                let pinImage = UIImage(named: "paid")
                annotationView!.image = pinImage

            }
        }
    }

    return annotationView
  }

Вот код для просмотра коллекции:

     //UICollection view - Location for parking car and street name
     extension HomeViewController : UICollectionViewDataSource, UICollectionViewDelegate {

       func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
    return cameraDetails.count
    }

       func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

         let cell = nearestCurrentLocationCollection.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! nearestLocationCollectionViewCell

    if self.cameraImageArray.count > 0 {

        cell.locationImage.sd_setImage(with: URL(string: 
      self.cameraImageArray[indexPath.row]))
        print("get location image",URL(string: 
        self.cameraImageArray[indexPath.row]))
    }

    if self.cameraDetails.count > 0 {

        cell.locationName.text = self.cameraDetails[indexPath.row]

    }
     //            cell.locationDistance.text = locationDistance[indexPath.row]

     if distanceArray.count > 0 {

        cell.locationDistance.text = String(format: " Distance : %.2f ", distanceArray[indexPath.row]/1000)

    }

      //            self.activityIndicator.stopAnimating()
      //            self.activityIndicator.isHidden = true

        return cell
    }

      func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
     moveMapPage()
       }

     fileprivate var pageSize: CGSize {
    let layout = self.nearestCurrentLocationCollection.collectionViewLayout as! UPCarouselFlowLayout
    var pageSize = layout.itemSize
    if layout.scrollDirection == .horizontal {
        pageSize.width += layout.minimumLineSpacing
    } else {
        pageSize.height += layout.minimumLineSpacing
    }
    return pageSize
    }

   func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
    let layout = nearestCurrentLocationCollection.collectionViewLayout as! UPCarouselFlowLayout
    let pageSide = (layout.scrollDirection == .horizontal) ? self.pageSize.width : self.pageSize.height
    let offset = (layout.scrollDirection == .horizontal) ? scrollView.contentOffset.x : scrollView.contentOffset.y
    currentPage = Int(floor((offset - pageSide / 2) / pageSide) + 1)
    print("currentpage::::\(self.currentPage)")


        if let selectedAnnotation = mapView.selectedAnnotations.first {
            // Ignore if correspondent annotation is already selected
            if 
   selectedAnnotation.isEqual(self.mapView.annotations[currentPage]) {

    self.mapView.selectAnnotation(self.mapView.annotations[currentPage], animated: true)
            }
        }


   }


 }

Получаете ли вы какую-либо другую информацию аннотации, такую ​​как заголовок или что-то еще, кроме текущей страницы?

Nikunj Kumbhani 11.08.2018 07:10

нету .. я не получил ни одной ошибки. Выше правильно?

PvDev 11.08.2018 07:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
727
1

Ответы 1

Попробуйте так, это работает для меня

UICollectionViewМетод делегата

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {

    for annotations_item in mapView.annotations{

       if annotations_item.title == Arr_Map_Data[indexPath.row].Title{
                 self.mapView.selectAnnotation(annotations_item, animated: true)
       }

    }
}

Метод делегата MapView

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {

    // first ensure that it really is an EventAnnotation:
    // Note :- Here get your Annotation I used MyPointAnnotation custom class that's why use that

    if let eventAnnotation = view.annotation as? MyPointAnnotation {

            if let index = self.Arr_Map_Comparables.index(of: eventAnnotation.obj!){
                let indexPath = IndexPath(row: index, section: 0)
                collectionView.scrollToItem(at: indexPath, at: .top, animated: true)
            }
    }
}

@PvDev, откуда вы хотите выбрать Анимацию с аннотациями, я должен сделать это по выбранному методу.

Nikunj Kumbhani 11.08.2018 07:54

будет ли это работать в представлении коллекции при прокрутке ячеек.

PvDev 11.08.2018 07:58

Для просмотра коллекции Жест смахивания Попробуйте это stackoverflow.com/a/38369367/10150796

Nikunj Kumbhani 11.08.2018 08:04

извините, не салфетка при просмотре коллекции при прокрутке выбранный индекс должен выбрать аннотацию карты

PvDev 11.08.2018 08:19

@PvDev Вы хотите, чтобы аннотация карты отображалась в выбранной ячейке представления коллекции и прокручивалась до ячейки представления коллекции для выбранной аннотации карты?

Nikunj Kumbhani 11.08.2018 08:26

точно .. прости, мой плохой английский

PvDev 11.08.2018 08:47

Позвольте нам продолжить обсуждение в чате.

Nikunj Kumbhani 11.08.2018 08:58

Другие вопросы по теме