2017-09-01 96 views
0

我的自定義MKAnnotationView子類不要設置它的image屬性。相反,它處理一些子視圖來顯示。自定義MKAnnotationView觸摸區域可笑地縮小

我在我的委託中執行public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)來檢測註釋觸摸。

由於觸摸區域默認使用image屬性進行計算,因此我的註釋視圖觸摸區域大約爲1px。這是荒唐的。

這是我如何創建它:

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確切中心CLIC,如果解僱了public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)委託方法!

任何建議放大觸摸區?

回答

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:)將覆蓋什麼也沒做。

這是我成功使我的註釋視圖完全被動的唯一方法。

相關問題