В дополнение к ответу jhabbott, это то, что сработало для меня. У меня есть пользовательский вид аннотации MKCustomAnnotationView
, который содержит пользовательскую аннотацию CustomPin
в качестве аннотации. Эта «булавка» содержит UIButton
в качестве замены кнопки аксессуара, которую я хотел получить сенсорные события.
Мой hitTest
метод будет выглядеть так:
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
UIView *result = [super hitTest:point withEvent:event];
//NSLog(@"ht: %f:%f %d %@", point.x, point.y, [[event touchesForView:self] count], result);
if ([result isKindOfClass:[MKCustomAnnotationView class]])
{
MKCustomAnnotationView *av = (MKCustomAnnotationView *)result;
CustomPin *p = av.annotation;
UIButton *ab = p.accessoryButton;
if (p.calloutActive && point.x >= ab.frame.origin.x)
return ab;
}
return result;
}
В большинстве случаев calloutActive
bool, вероятно, не требуется.