一日の後、私はあきらめます。問題を解決する方法が見つかりません。
別の画面に移動するためにタップを検出したいカスタムコールアウトビューを含むマップがあります。
私のコードを見てください、これは私のカスタム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位置を使用する必要があり、コールアウトビューが注釈ビューの外側にあり、タップが検出されないことです。私は多くの解決策を試しましたが、どれもうまく機能しません。
私の現在の解決策は、ピンスーパービューにジェスチャレコグナイザーを使用してビューを直接追加することです。これはうまく機能しますが、ユーザーがズームするとビューが消えます。
私を助けてください、さもないと私は自殺するつもりです;)
編集:まだ解決策が見つかりませんが、ズームのためにマップをピンチしても、ピンスーパービューのビューが消えなくなりました(ピンチイベントをインターセプトするためのジェスチャ認識機能を追加しました)。したがって、それは解決策になる可能性がありますが、間違いなく良いものではありません。
編集2:カスタムアノテーションビューでhitTestをオーバーライドすることが解決策です。これで、コールアウトサブビューのタップを検出できます。