gpt4 book ai didi

ios - 自定义 MKAnnotationView 触摸区域窄得离谱

转载 作者:行者123 更新时间:2023-11-29 11:42:01 24 4
gpt4 key购买 nike

我的自定义 MKAnnotationView 子类没有设置它的 image 属性。相反,它处理一些要显示的 subview 。

我在我的委托(delegate)中实现了 public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 来检测注释触摸。

因为默认情况下触摸区域是使用 image 属性计算的,所以我的注释 View 触摸区域大约 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 子句中的断点触发,但返回任何内容(super/self/imageView)什么都不做。

最后,如果我像这样实现 hitTest:

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

如果我点击我的 annotationView 精确中心,public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView) 委托(delegate)方法被触发!

有什么扩大触摸区的建议吗? 🤔

最佳答案

据我了解,func point(inside:with:)hitTest(point:with:) 无助于扩大调用委托(delegate)的区域public func mapView(_ mapView: MKMapView, didSelect view: MKAnnotationView)

最后,我扩大了 MKAnnotationView 框架以包含我的注释 subview 并将 anchor 移动到我想要我的注释中心的位置

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:) 覆盖,它们什么也没做。

这是我成功使我的注释 View 完全响应的唯一方法。

关于ios - 自定义 MKAnnotationView 触摸区域窄得离谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45997984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com