web-dev-qa-db-ja.com

MapKit iOS 9 detailCalloutAccessoryViewの使用

WWDCビデオ206 を見た後、これは詳細な吹き出しビューをmapView注釈ビューに追加する簡単なタスクだと思いました。

だから、私は私が何か間違ったことをしていると思います。

ピンビューを設定して

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

    let view:MKAnnotationView!

    if let dequed = routeMapView.dequeueReusableAnnotationViewWithIdentifier("pin") {
        view = dequed
    }
    else {
        view = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "pin")
    }

    let x = UIView(frame: CGRectMake(0, 0, 200, 200))
    x.backgroundColor = UIColor.redColor()

    // shows the red
    //view.leftCalloutAccessoryView = x

    // working as no subtitle - but no red view
    view.detailCalloutAccessoryView = x

    view.canShowCallout = true
    return view
}

これしか手に入らない

enter image description here

leftCalloutAccessoryViewで試してみると enter image description here

私は何かを逃しているに違いない。注:detailCalloutAccessoryViewに画像を追加するだけの場合

view.detailCalloutAccessoryView = UIImage(named:"YourImageName")

画像はありますが、サイズなどは正しくあります

自分のカスタムビューを配置する方法がわかりません。

ありがとう

18
DogCoffee

ビューの幅と高さにいくつかの制約を追加する必要があります。

func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
    var av = mapView.dequeueReusableAnnotationViewWithIdentifier("id")
    if av == nil {
        av = MKPinAnnotationView(annotation: annotation, reuseIdentifier: "id")
    }

    let myView = UIView()
    myView.backgroundColor = .greenColor()

    let widthConstraint = NSLayoutConstraint(item: myView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 40)
    myView.addConstraint(widthConstraint)

    let heightConstraint = NSLayoutConstraint(item: myView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: 20)
    myView.addConstraint(heightConstraint)

    av!.detailCalloutAccessoryView = myView
    av!.canShowCallout = true

    return av!
}

Munich 1972

intrinsicContentSizeの追加も機能します。

ビューをtranslatesAutoresizingMaskIntoConstraintsに設定すると、MapKitが自動的にdetailCalloutAccessoryViewをfalseに設定することがテストでわかりました。

WWDC 2015セッション "MapKitの新機能" 「自動レイアウトがサポートされている」と伝えられました。 Appleは実際には自動レイアウトを使用する必要があることを意味しますか?!

20
Klaas

1。 UIViewを作成し、マップに追加するVC

enter image description here

ここでは、サイズ、制約、ボタン、画像などを追加できます。この場合、スタックビューは完全に機能します。

2。 Maps VCを作成してアウトレット

カスタムビューから、通常どおりドラッグを制御します。

@IBOutlet var customDetailView: UIView!

3。 pinにdetailCalloutAccessoryViewを設定します

例えば

func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
    view.detailCalloutAccessoryView = customDetailView
}

成功

enter image description here

13
DogCoffee