gpt4 book ai didi

ios - 无法将点击手势添加到自定义标注 View

转载 作者:行者123 更新时间:2023-11-29 12:43:47 46 4
gpt4 key购买 nike

我的应用程序中有一个 map View ,需要为每个 map 注释自定义 calloutView。因此,我有一个用于此自定义 calloutView 的 XIB 文件。这是我的 map View Controller 代码

- (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view {
CustomCalloutView *calloutView = (CustomCalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"CustomCalloutView" owner:self options:nil] objectAtIndex:0];
[calloutView.layer setCornerRadius:10];
CGRect calloutViewFrame = calloutView.frame;
calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size.width/2 + 15, -calloutViewFrame.size.height);
calloutView.frame = calloutViewFrame;

// some other code such as load images for calloutView

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap)];
singleTap.numberOfTapsRequired = 1;
[calloutView addGestureRecognizer:singleTap];
[view addSubview:calloutView];
}

- (void)handleSingleTap{
NSLog(@"it works");
}

但是,handleSingleTap: 从未被调用过。相反,每次点击 calloutView 只会关闭 calloutView。我还尝试在 calloutView 上添加一个按钮,但点击它也会导致 calloutView 消失,而不是调用按钮操作。

有人能帮忙吗?

更新:

我试过修改代码

    [view addSubview:calloutView];

    [self.view addSubview:calloutView];

将自定义的 calloutView 添加到主容器 View 而不是 mapView。

然后,点击手势就可以正常工作了。因此,我认为问题应该是mapView引起的,似乎mapView将calloutView上的所有触摸事件都传递给了自己。有人对此有想法吗?

最佳答案

好的。我终于找到了解决方案。我们需要为 MKAnnotationView 定制一个类来解决这个问题。这是 .m 文件中的代码

- (UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event
{
UIView* hitView = [super hitTest:point withEvent:event];
if (hitView != nil)
{
[self.superview bringSubviewToFront:self];
}
return hitView;
}

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent*)event
{
CGRect rect = self.bounds;
BOOL isInside = CGRectContainsPoint(rect, point);
if(!isInside)
{
for (UIView *view in self.subviews)
{
isInside = CGRectContainsPoint(view.frame, point);
if(isInside)
break;
}
}
return isInside;
}

希望这对其他人有帮助。

关于ios - 无法将点击手势添加到自定义标注 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24185424/

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