【问题标题】:Paint many pins of various colors. iOS. Swift 3. Xcode 9画许多不同颜色的别针。 IOS。斯威夫特 3. Xcode 9
【发布时间】:2018-10-15 11:40:26
【问题描述】:

我需要在地图上绘制 100 个图钉,最多 4 种不同颜色,以注意由我的“colorOfPin”(绿色、黄色、红色和蓝色)创建的变量。

通过一个函数,我循环生成100棵松树的100个注解:

func paintPinsIP () {

    for item in 0 ... (numberPoints - 1) {

            let annotationPin = LocationPoint ()

            annotationPin.namePoint= elements [item].namePoint
            annotationPin.coordinate = elements [item].coordinate

            identificaPin = annotationPin.namePoint

            viewOfMap.addAnnotation(annotationPin)

              }
    }

接下来我在地图上显示这 100 个注释,但每个图钉必须具有由变量“colorOfPin”指示的颜色(绿色、黄色、红色或蓝色):

 func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
    if (annotation is MKUserLocation) {return nil}

    let pinIdentifier = identificaPin

    var aView = mapView.dequeueReusableAnnotationView(withIdentifier: pinIdentifier)
    if aView == nil {
        let pinView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: pinIdentifier)
        guard annotation is LocationPoint else {return nil}

        pinView.isEnabled = true
        pinView.canShowCallout = false
        aView = pinView

        switch colorOfPin {
            case .red: pinView.pinTintColor = UIColor.red
            case .yellow: pinView.pinTintColor = UIColor.yellow
            case .green: pinView.pinTintColor = UIColor.green
            case .blue: pinView.pinTintColor = UIColor.blue
            }

    } else {
        aView?.annotation = annotation
    }

    return aView
}

但是 100 个点以最后一个图钉的颜色出现在地图上。所有点的颜色都是引脚#99的颜色。由于点#99的‘colorOfPin’变量是‘蓝色’,所以这100个引脚显示为蓝色。

如何为每个引脚绘制由变量“colorOfPin”指示的颜色?

【问题讨论】:

  • colorOfPin 的值在哪里设置?
  • 当出队的注解视图不为零时会发生什么?在那种情况下颜色是如何设置的?

标签: ios swift


【解决方案1】:

由于第 99 点的“colorOfPin”变量为“蓝色”,因此 100 个引脚显示为蓝色。

paintPinsIP()mapView(_:viewFor:) 方法中设置断点,并查看调用这些方法的顺序。您没有在mapView(_:viewFor:) 中设置colorOfPin 的值,因此看起来您希望地图视图在将注释添加到地图后立即获取注释视图。然而,真正发生的事情是,您向地图添加了一堆注释,一段时间后,当地图尝试自行绘制时,它会调用mapView(_:viewFor:) 来获取任何碰巧可见的注释的视图。到那时,colorOfPin 将会改变。

看起来LocationPoint 可能是您创建的一个采用MKAnnotation 协议的类。解决问题的方法是向该类添加pinColor 属性,以便在创建注释时设置图钉的颜色。然后,当地图视图为您的注释之一调用您的mapView(_:viewFor:) 方法时,您可以使用它的pinColor 属性来设置引脚注释视图的pinTintColor 属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2017-02-15
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多