3

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 にタッチ イベントを渡したりしません。代わりに、関数を呼び出す必要があります。どんなヒントも素晴らしいでしょう。

4

0 に答える 0