我正在使用SMCalloutView为我的 mapView 创建自定义标注。我遇到的问题是当标注视图可见并且用户按下标注时,如果另一个注释在标注视图下,它将关闭当前选定的注释并选择可见标注视图下的注释。
我想也许我可以创建一个 UIView 子类来捕捉所有的触摸事件。所以我创建了一个 UIView 子类,如果我将它直接添加到 mapView 中,所有函数都会正确触发。但是当我将它用于弹出窗口时,它似乎根本不起作用。
import Foundation
import UIKit
class popOverSub: UIView {
override init(frame: CGRect) {
super.init(frame: frame)
let myTap = UITapGestureRecognizer(target: self, action: "touchEventTest")
addGestureRecognizer(myTap)
userInteractionEnabled = true
backgroundColor = UIColor.greenColor()
}
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func touchEventTest() {
println("touchEventTest")
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
println("touch begins")
}
}
为了完成这里是我调用自定义 CalloutView 的地方。
func mapView(mapView: MKMapView!, didSelectAnnotationView view: MKAnnotationView!) {
let popView = popOverSub(frame: CGRect(x: 0, y: 0, width: 100, height: 200))
calloutView.contentView = popView
self.calloutView.calloutOffset = CGPoint(x: view.frame.width*0.5, y: 0)
self.calloutView.delegate = self
calloutView.presentCalloutFromRect(calloutView.bounds, inLayer: view.layer, constrainedToLayer: self.mapView.layer, animated: true)
}
我需要做什么。如果用户按下标注视图,它不会关闭标注,或将触摸事件传递给 mapView/Annotation 下面。相反,它需要调用一个函数。任何提示都会很棒。