Как сделать ссылки аннотации карты на ячейку коллекции пользовательского интерфейса при прокрутке ячейки, выделите аннотацию - PullRequest
0 голосов
/ 14 января 2019

Поскольку заголовок описывает вопрос, я понятия не имею, какая функция или метод вызывает ссылки.

Я уже добавил все аннотации на карту.

Надеюсь, кто-нибудь может дать конкретный пример кода, спасибо.

1 Ответ

0 голосов
/ 14 января 2019

Пара мыслей:

  1. У вас есть код, который говорит:

    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if scrollView is UICollectionView {
            let collectionViewCenter = CGPoint(x: myMap.bounds.size.width / 2 + myMap.frame.minX, y: myMap.bounds.size.height / 2 + myMap.frame.minY)
            let centredCellIndexPath = cafeCollectionView.indexPathForItem(at: collectionViewCenter)
    
            guard let path = centredCellIndexPath else {
                // There is no cell in the center of collection view (you might want to think what you want to do in this case)
                return
            }
    
            // select annotation here, if needed
        }
    }
    

    Вы устанавливаете collectionViewCenter в центр карты , , но затем используете его в качестве параметра для indexPathForItem(at:) Если вы пытаетесь найти centeredCellIndexPath, вы должны использовать центр bounds вида коллекции, а не карты.

    Если ваша карта, как и приложение AirBnb, имеет другой размер, чем представление коллекции, вы, вероятно, пытаетесь вызвать indexPathForItem(at:) для CGPoint, который находится вне bounds представления коллекции и не получит любые попадания в этом сценарии.

    Итак, если вы хотите, например, центр представления коллекции, вы замените назначение collectionViewCenter на что-то вроде:

    let collectionViewCenter = CGPoint(x: cafeCollectionView.bounds.midX,
                                       y: cafeCollectionView.bounds.midY)
    

    Или, если вы хотите поместить эту ячейку в левый край, тогда используйте фиксированное значение x вместо midX.

  2. Ваш код для выбора аннотации также не соответствует действительности. Вы делаете:

    if let selectedAnnotation = myMap.selectedAnnotations.first {
        // Ignore if correspondent annotation is already selected
        if selectedAnnotation.isEqual(self.myMap.annotations[path.row]) {
            self.myMap.selectAnnotation(self.myMap.annotations[path.row], animated: true)
        }
    }
    

    Это фактически говорит: «Если выбранная аннотация является той, которую мы хотим, то выберите ее». Я думаю, что вы хотите противоположное, а именно:

    • Найдите аннотацию, которую следует выбрать;
    • Если он не выбран, сделайте это.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...