没有调用MKMapView MKPointAnnotation点击事件
我正在使用MKPointAnnotation MKMapView(委托设置正确)。 注释是在后台线程调用的这个方法中生成的。
func updateMapAnnotations() { for var i = 0; i < DataManager.getStationList().count; i++ { var s = DataManager.getStationList()[i] as Station var annotation = MKPointAnnotation() annotation.setCoordinate(CLLocationCoordinate2D(latitude: s.latitude, longitude: s.longitude)) annotation.title = "\(s.id)" dispatch_async(dispatch_get_main_queue(), { self.mapView.addAnnotation(annotation) }) } }
注解视图在这里生成:
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if (annotation is MKUserLocation) { return nil } let reuseId = "StationAnnotation" let annoStation = DataManager.getStationById(annotation.title!.toInt()!) var anView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if anView == nil { anView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) let base = UIView(frame: CGRect(x: 0, y: 0, width: 67, height: 26)) let imageView = UIImageView(frame: CGRect(x: 2, y: 2, width: 22, height: 22)) imageView.image = UIImage(named: "test") base.layer.cornerRadius = 3.0 base.clipsToBounds = true base.backgroundColor = UIColor.whiteColor() var priceLabelBig = UILabel(frame: CGRect(x: 25, y: 0, width: 30, height: 25)) priceLabelBig.textColor = UIColor.blackColor() priceLabelBig.font = UIFont(name: priceLabelBig.font.fontName, size: 15) var priceLabelSmall = UILabel(frame: CGRect(x: 55, y: 0, width: 12, height: 15)) priceLabelSmall.textColor = UIColor.blackColor() priceLabelSmall.font = UIFont(name: priceLabelBig.font.fontName, size: 12) if let curPrice = annoStation?.getTextWithSettings().description { var stringLength = countElements(curPrice) var substringToIndex = stringLength - 1 priceLabelBig.text = curPrice.substringToIndex(advance(curPrice.startIndex, substringToIndex)) priceLabelSmall.text = curPrice.substringFromIndex(advance(curPrice.startIndex, substringToIndex)) } base.addSubview(imageView) base.addSubview(priceLabelBig) base.addSubview(priceLabelSmall) anView.addSubview(base) anView.canShowCallout = true } else { anView.annotation = annotation } return anView }
我知道我必须设置注释标题,并将“canShowCallOut”设置为true以获得“didSelectAnnotationView”的工作。 正如你所看到的,两者都设置正确。
所以我有一个mapView(委托设置),“canShowCallOut”是真实的,一个标题设置和工作。
要进入详细信息页面,我想跟踪annotationViews('didSelectAnnotationView')上的点击,但不会调用它。
我究竟做错了什么?
好吧,我自己find了解决scheme。
您必须显式设置annotationViews框架。 如果您只是为视图设置子视图,它们将显示,但视图框架设置为0,0(高度,重量)。 所以你只是不能点击它,因为面积是0,0。
我的解决scheme是这样的,有趣的线是annotationView.frame = CGRect(x: 0, y: 0, width: 67, height: 26)
。 其他一切都是一样的。 现在点击注释调用didSelectAnnotationView
。
func mapView(mapView: MKMapView!, viewForAnnotation annotation: MKAnnotation!) -> MKAnnotationView! { if (annotation is MKUserLocation) { return nil } let reuseId = "stationAnnotation" let annoStation = DataManager.getStationById(annotation.title!.toInt()!) var annotationView = mapView.dequeueReusableAnnotationViewWithIdentifier(reuseId) if annotationView == nil { annotationView = MKAnnotationView(annotation: annotation, reuseIdentifier: reuseId) annotationView.frame = CGRect(x: 0, y: 0, width: 67, height: 26) let base = UIView(frame: CGRect(x: 0, y: 0, width: 67, height: 26)) base.userInteractionEnabled = true let imageView = UIImageView(frame: CGRect(x: 2, y: 2, width: 22, height: 22)) imageView.image = UIImage(named: "zapfsaeule") base.layer.cornerRadius = 3.0 base.clipsToBounds = true base.backgroundColor = UIColor.whiteColor() var priceLabelBig = UILabel(frame: CGRect(x: 25, y: 0, width: 30, height: 25)) priceLabelBig.textColor = UIColor.blackColor() priceLabelBig.font = UIFont(name: priceLabelBig.font.fontName, size: 15) var priceLabelSmall = UILabel(frame: CGRect(x: 55, y: 0, width: 12, height: 15)) priceLabelSmall.textColor = UIColor.blackColor() priceLabelSmall.font = UIFont(name: priceLabelBig.font.fontName, size: 12) if let curPrice = annoStation?.getPriceWithSettings().description { var stringLength = countElements(curPrice) var substringToIndex = stringLength - 1 priceLabelBig.text = curPrice.substringToIndex(advance(curPrice.startIndex, substringToIndex)) priceLabelSmall.text = curPrice.substringFromIndex(advance(curPrice.startIndex, substringToIndex)) } base.addSubview(imageView) base.addSubview(priceLabelBig) base.addSubview(priceLabelSmall) annotationView.addSubview(base) annotationView.annotation = annotation } else { annotationView.annotation = annotation } return annotationView }
- predicateWithBlock作为ABPeoplePicker.predicateForEnablingPerson的谓词导致exception
- iOS – 从指数+模数创buildSecKeyRef
- app store是否也向iPhone 5用户显示较小的屏幕截图,反之亦然?
- 在应用速率大于2倍的情况下,从avplayer进行干活播放
- jssorting多列不工作在IE和Safari
- 部分pagecurl动画与swift
- Azure Logic应用程序,Azure SQL,Azure移动应用程序和Loop(iOS)更好地结合在一起!
- 如果用户拒绝访问摄像头,如何防止WKWebView显示摄像头模式?
- 在Swift中将JSON加载到UItableView中