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
}
これしか手に入らない
leftCalloutAccessoryView
で試してみると
私は何かを逃しているに違いない。注:detailCalloutAccessoryView
に画像を追加するだけの場合
view.detailCalloutAccessoryView = UIImage(named:"YourImageName")
画像はありますが、サイズなどは正しくあります
自分のカスタムビューを配置する方法がわかりません。
ありがとう
ビューの幅と高さにいくつかの制約を追加する必要があります。
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!
}
intrinsicContentSize
の追加も機能します。
ビューをtranslatesAutoresizingMaskIntoConstraints
に設定すると、MapKitが自動的にdetailCalloutAccessoryView
をfalseに設定することがテストでわかりました。
WWDC 2015セッション "MapKitの新機能" 「自動レイアウトがサポートされている」と伝えられました。 Appleは実際には自動レイアウトを使用する必要があることを意味しますか?!
1。 UIViewを作成し、マップに追加するVC
ここでは、サイズ、制約、ボタン、画像などを追加できます。この場合、スタックビューは完全に機能します。
2。 Maps VCを作成してアウトレット
カスタムビューから、通常どおりドラッグを制御します。
@IBOutlet var customDetailView: UIView!
3。 pinにdetailCalloutAccessoryViewを設定します
例えば
func mapView(mapView: MKMapView, didSelectAnnotationView view: MKAnnotationView) {
view.detailCalloutAccessoryView = customDetailView
}
成功