2017-09-01 9 views
0

私のカスタムMKAnnotationViewサブクラスは設定していませんimageプロパティです。代わりに、表示されるいくつかのサブビューを処理します。カスタムMKAnnotationViewのタッチゾーンがばかげて狭いです

私は代理人に注釈タッチを検出するためにpublic func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)を実装します。

タッチゾーンはデフォルトでimageプロパティで計算されるため、アノテーションビューのタッチゾーンは約1ピクセルです。ばかげてる。

これは私がそれを作成する方法である:

init(annotation: JZStreamAnnotation) { 
    self.imageView = UIImageView.init(image: <an image>) 
    self.imageView.contentMode = .center 
    super.init(annotation: annotation, reuseIdentifier: JZStreamAnnotationView.identifier) 
    self.canShowCallout = false 
    self.imageView.center = CGPoint(x: self.frame.width/2, y: self.frame.height/2) 
    self.addSubview(self.imageView) 
} 

I read this postが、私はHitTestメソッドがどのように動作するかを把握することはできません。ここでは何も作らない実装:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 
    if point.x > -100, point.x < 100, point.y > -100, point.y < 100 { 
     //return self 
     //return self.imageView 
     return super.hitTest(point, with: event) 
    } 
    return .none 
} 

if句火災に位置breapointが、(super/self/imageView)何もしない何でも返します。

最後に、私はこのようhitTest実装する場合:

override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? { 
    return .none 
} 

と解雇場合、私は私のannotationView正確な中心、public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)デリゲートメソッドにCLICあれば!

タッチゾーンを拡大するためのアドバイスはありますか?

答えて

0
私の知る限り理解されるように

func point(inside:with:)hitTest(point:with:)public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)

デリゲートを呼び出すゾーンは最後に、私は私の注釈サブビューを囲むMKAnnotationView枠を拡大し、にアンカーポイントを移動してしまっ拡大するのに役立ちません私は

self.frame = CGRect(x: 0, y: 0, width: 
self.myLabel.frame.width, height: self.myLabel.frame.height) 
self.centerOffset = CGPoint(x: self.frame.width/2, y: self.myImageView.frame.height/2) 

私の注釈センターを望んでいた場所を正確にすることそれから私は何もしなかったpoint(inside:with:)hitTest(point:with:)オーバーライドを削除しました。

これは、アノテーションビューを完全に反応させるために成功した唯一の方法です。

関連する問題