0

ユーザーがピンをクリックすると、MKAnnotationView が表示されますが、非常に制限されています。カスタム ボタンを作成しましたが、ピンから表示されるビュー全体をカスタマイズする方法はありますか? これが私がこれまでに持っているものです。

    func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {


    let annotationView = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "location")
    annotationView.canShowCallout = true

    let btn = UIButton(type: .Custom) as UIButton
    btn.frame = CGRectMake(50, 60, 60, 50)
    btn.setTitle("button", forState: .Normal)
    btn.titleLabel?.textAlignment = NSTextAlignment.Center
    btn.contentHorizontalAlignment = UIControlContentHorizontalAlignment.Center

    btn.layer.borderColor = UIColor.blueColor().CGColor
    btn.layer.borderWidth = 0.5

    btn.backgroundColor = UIColor.redColor()

    annotationView.rightCalloutAccessoryView = btn

    return annotationView
}
4

1 に答える 1

2

プログラムで独自の UIView を作成し、それらを MKPinAnnotationView のleftCalloutAccessoryViewrightCalloutAccessoryView、およびdetailCalloutAccessoryViewプロパティに割り当てることができるはずです。UIButton は UIView のサブクラスであるため、これまでの内容は理論的には機能するはずです。

これら 3 つのプロパティに固執し、各 UIView のフレーム プロパティをいじれば、かなりの量のカスタマイズを実行できるはずです。また、各 UIView は複数のサブビューを持つことができることに注意してください。

「ハッキー」ソリューション

完全にカスタマイズ可能な吹き出しを本当に作成したい場合は、おそらくピン自体にタップ ジェスチャ認識機能を設定する必要があります。これにより、カスタムの吹き出しビューが表示されます。ただし、コールアウトがよりグリッチになる可能性が高いため、このより「ハックな」方法はお勧めしません。残念ながら、カスタムの吹き出しビューを直接割り当てる方法はないと思います。

編集: Rob が示唆したようdidSelectAnnotationViewに、MKMapViewDelegate に実装して、タップ ジェスチャ レコグナイザーの代わりにカスタム コールアウト ビューを生成できます。これはより良い解決策ですが、それでも「ハック」なソリューションです。ストック コールアウト ビューよりもグリッチがあります。

于 2016-02-13T16:39:43.883 に答える