注释图像在重用后发生变化

时间:2017-02-02 22:20:45

标签: annotations swift3 mkannotationview

我的问题与此类似 Displaying custom multiple pins shows wrong pins for locations 但略有不同,我在斯威夫特工作。即使转换后,我也无法解决我的问题。 我有注释,每个都有不同的图像。图像是编号指针。每个注释的细节来自一个plist。标题是“1停车场”,“2磨”等。我在空间前取部分得到对应于png图像的数字。

加载时,所有注释都具有正确的图像。如果我将该区域平移并返回,则图像可以相互交换。这似乎是一个重用的问题,但我看不到解决方案。在viewdidload中调用getMapAnnotations()。

 func mapView(_ mapView: MKMapView!, viewFor annotation: MKAnnotation!) -> MKAnnotationView! {


    let identifier = "Stand"


    var imageI: String?
    var imageAn: String?
    imageI = annotation.title!
    if annotation.isKind(of: Stands.self) {
      print("ANNOTATION \(imageI!)")
      if let range = imageI?.components(separatedBy: " ") {

        var imageII = range[0]
        imageAn = "\(imageII).png"
        print (imageAn!)
      }

      var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: identifier)

      if annotationView == nil {

        annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: identifier)

        //
        annotationView?.image = UIImage(named: imageAn! )
        annotationView?.canShowCallout = true
        annotationView?.layer.zPosition = -1

        let btn = UIButton(type: .detailDisclosure)
        annotationView?.rightCalloutAccessoryView = btn
      } else {

        annotationView!.annotation = annotation
      }

      return annotationView
    }

    return nil
  }

然后是注释视图

RUN apt-get clean && apt-get update \
    && apt-get -yqq install \
    apache2 \
    php \
    php-mcrypt \
    php-curl \
    php-mbstring \
    php-xml \
    php-zip \
    libapache2-mod-php \
    php-mysql \
    git \
    supervisor \
    && apt-get -y autoremove \
    && apt-get clean \
    && php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && ln -sf /dev/stdout /var/log/apache2/access.log \
    && ln -sf /dev/stderr /var/log/apache2/error.log \
    curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash    && nvm install 7.4.0 \
   && nvm use 7.4.0 \

1 个答案:

答案 0 :(得分:0)

我似乎已经找到了解决方案,更多的是通过反复试验而不是知道自己在做什么。 我补充道 annotationView?.image = UIImage(名称:imageAn!) 制作

}else{
annotationView?.image = UIImage(named: imageAn! )
annotationView.annotation  = annotation
}

如果我理解正确,注释是坐标,标题和副标题的信息,没有关于显示的信息。 AnnotationView设置注释的显示方式。使用图钉或自定义图像。 如果AnnotationView是nill,则正确创建注释视图。如果注释退出视图并返回,则AnnotationView不是nil,因此系统会随机获取视图以显示它。 添加 annotationView?.image = UIImage(名称:imageAn!) 强制显示正确的图像。 如果此架构不正确,我确定有人会纠正我。