0

一日の後、私はあきらめます。問題を解決する方法が見つかりません。

別の画面に移動するためにタップを検出したいカスタムコールアウトビューを含むマップがあります。

私のコードを見てください、これは私のカスタム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をオーバーライドすることが解決策です。これで、コールアウトサブビューのタップを検出できます。

4

2 に答える 2

2

オーバーライドしてみてください-hitTest:withEvent:

于 2013-03-16T02:57:38.603 に答える
0

レコグナイザーを配置してリッスンする場所を知るには、カスタム コールアウトのソリューションについて詳しく知る必要があります。

カスタム コールアウトにこのソリューションを使用していますか?

https://github.com/j4n0/callout

もしそうなら、UITapGestureRecogniser を CalloutView に追加するだけですか? または、calloutview xib ファイルのボタンにセレクターを追加しますか? 苦労している理由がわかりません。これらのレコグナイザーを正しいクラスに追加していますか?

于 2013-03-15T19:54:51.113 に答える