をアウトコール:ユーザーがピンを押すポジションは、私は次のコードに追加されたカスタム吹き出しビューで<code>MKAnnotation</code>を持つビューの上にピンスウィフトIOS MKMapView
func mapView(mapView: MKMapView,
didSelectAnnotationView view: MKAnnotationView)
{
if view.annotation is MKUserLocation
{
return
}
let customAnnotation = view.annotation as! MyAnnotation
if (applicable) {
let calloutView = CustomCallout()
var r : MKMapRect = largeMapView.visibleMapRect
let p : MKMapPoint = MKMapPointForCoordinate(customAnnotation.coordinate)
r.origin.x = p.x - r.size.width * 0.5
r.origin.y = p.y - r.size.height * 0.75
// 3
calloutView.translatesAutoresizingMaskIntoConstraints = false
calloutView.imageView.translatesAutoresizingMaskIntoConstraints = false
calloutView.clipsToBounds = true
calloutView.imageView.clipsToBounds = true
let mapPointCoordinate : CLLocationCoordinate2D = MKCoordinateForMapPoint(p)
let pointAsCGPoint : CGPoint = self.largeMapView.convertCoordinate(mapPointCoordinate, toPointToView: self.largeMapView)
calloutView.frame = CGRectMake(pointAsCGPoint.x, pointAsCGPoint.y, viewWidth! * 0.6, (viewHeight! - 110) * 0.6)
calloutView.addSubview(calloutView.imageView)
view.addSubview(calloutView)
view.addConstraint(NSLayoutConstraint(item: calloutView, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: (viewHeight! - 110) * 0.6))
view.addConstraint(NSLayoutConstraint(item: calloutView, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .NotAnAttribute, multiplier: 1, constant: viewWidth! * 0.6))
calloutView.addConstraint(NSLayoutConstraint(item: calloutView.imageView, attribute: .Top, relatedBy: .Equal, toItem: calloutView, attribute: .Top, multiplier: 1, constant: 0))
calloutView.addConstraint(NSLayoutConstraint(item: calloutView.imageView, attribute: .Bottom, relatedBy: .Equal, toItem: calloutView, attribute: .Bottom, multiplier: 1, constant: 0))
calloutView.addConstraint(NSLayoutConstraint(item: calloutView.imageView, attribute: .Leading, relatedBy: .Equal, toItem: calloutView, attribute: .Leading, multiplier: 1, constant: 0))
calloutView.addConstraint(NSLayoutConstraint(item: calloutView.imageView, attribute: .Trailing, relatedBy: .Equal, toItem: calloutView, attribute: .Trailing, multiplier: 1, constant: 0))
largeMapView.setVisibleMapRect(r, animated: true)
}
}
、私は水平になるように地図を動かします押し付けられたピンに対する比率で、中央に、垂直に設定されます。今、私はCustomCallOut
をピンのすぐ上の中央に配置しようとしていますが、私が何をしていても、それは画面上で不規則に位置しているようです。
「不安定」を定義...左、右、上下、横などですか? –
それは時にはピンの側にあるもの、時にはそのピンの上の他の時、ピンは基本的にビューの真ん中にある...不安定なことは私が定義できる唯一の方法です – Alk
それはおそらくどこですか最初にピンを再センタリングする前にタップしていますか? –