一天后我放弃了。我找不到解决问题的方法。
我有一张带有自定义标注视图的地图,我想检测点击以转到另一个屏幕。
看看我的代码,这是我的自定义 MKAnnotationView
- (void)didAddSubview:(UIView *)subview
{
if ([[[subview class] description] isEqualToString:@"UICalloutView"])
{
for (UIView *subsubView in subview.subviews)
{
if ([subsubView class] == [UIImageView class])
{
UIImageView *imageView = ((UIImageView *)subsubView);
[imageView removeFromSuperview];
}
else if ([subsubView class] == [UILabel class])
{
UILabel *labelView = ((UILabel *)subsubView);
[labelView removeFromSuperview];
}
}
}
}
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
MapAnnotation *ann = self.annotation;
if(selected)
{
calloutView = [[AnnotationCalloutView alloc] initWithFrame:CGRectMake(-40, -50, 200, 30) andAnnotation:ann];
[self addSubview:calloutView];
[self animateCalloutAppearance];
}
else
{
//Remove custom view
[calloutView removeFromSuperview];
[self setCalloutView:nil];
}
}
结果:
问题就像我必须使用负 Y 位置,标注视图在注释视图之外,并且未检测到点击。我尝试了很多解决方案,但没有一个效果很好。
我目前的解决方案是在 pin superview 上直接添加一个带有手势识别器的视图,它效果很好,但是如果用户缩放我的视图就会消失。
请帮助我,否则我会自杀;)
编辑:我仍然没有找到解决方案,但是现在当我捏地图进行缩放时,我对 pin superview 的视图不再消失(我添加了一个手势识别器来拦截捏事件)。所以它可以是一个解决方案,但绝对不是一个好的解决方案。
编辑 2:在我的自定义注释视图上覆盖 hitTest 是解决方案。我现在可以检测到我的标注子视图上的点击。