在didDeselect之前执行didSelect

时间:2018-03-30 12:40:39

标签: ios swift mkmapview mkannotationview mkmapviewdelegate

标题可能不是因为实际问题正义,因为可能存在完全不同的解决方案。

我们要做的是创建像地图视图这样的类似于视图的视图,当您按某个Annotation时,数据将显示在集合视图中的屏幕底部。在集合视图中或通过点击注释选择注释时。选定的注释将比所有其他注释更大。要完成所有这些操作,我们的didSelectdidDeselect委托方法如下所示

func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) {
    if view.annotation!.isKind(of: MKUserLocation.self) {
        return
    }

    if view.isSelected {
        view.transform = CGAffineTransform(scaleX: annotationSizeMultiplier, y: annotationSizeMultiplier)
        }

    if !isVisible {
        isVisible = true
        UIView.animate(withDuration: 0.25, animations: {
            self.collectionViewBackground.frame.size.height += self.height
            self.collectionViewBackground.frame.origin.y -= self.height
            self.customCallout.frame = self.collectionViewBackground.frame
        }, completion: { _ in
            self.customCallout.showCollectionCell(self, annotationTitle: ((view.annotation?.title)!)!)
        })
    } else {
        customCallout.showCollectionCell(self, annotationTitle: ((view.annotation?.title)!)!)
    }
}

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    if !view.isSelected {
        view.transform = CGAffineTransform.identity
    }
}

然而,我们想要做的是在地图视图上没有注释的地方点击时隐藏集合视图。然而,我们遇到的问题是我们实际上并不知道用户是否选择了另一个注释,或者只是在地图视图中随机点击,因为didDeselect之前正在调用didSelect

我们确实通过一个非常讨厌的解决方案解决了这个问题,我们对此并不满意,您可以在下面看到。

func mapView(_ mapView: MKMapView, didDeselect view: MKAnnotationView) {
    if !view.isSelected {
        view.transform = CGAffineTransform.identity
    }

    DispatchQueue.main.asyncAfter(deadline: .now() + 0.1, execute: {
        if mapView.selectedAnnotations.count == 0 {
            self.isVisible = false
            UIView.animate(withDuration: 0.25, animations: {
                self.collectionViewBackground.frame.size.height -= self.height
                self.collectionViewBackground.frame.origin.y += self.height
                self.customCallout.frame = self.collectionViewBackground.frame
            })
        }
    })
}

我们希望有人知道一个更好的解决方案来实际解决这个问题"正确"方式。

0 个答案:

没有答案