0

カスタムUIImageViewを作成し、UIScrollViewのUIImageViewに配置しています。ユーザーがカスタム UIImageView をタップすると、ポップオーバーが表示されます。

私が抱えている可能性のある問題は、カスタム UIImageViews の 2 つが重なっている場合です。ユーザーにどちらが欲しいか尋ねる必要があります。

どのカスタム UIImageViews がタップ内にあるかを確認するにはどうすればよいですか? タップを検出した場合、各ビューがそれ自体を返す必要があります。複数のビューが返された場合は、ユーザーにどのビューが必要かを尋ねることができます。

各カスタム UIImageView には、作成された UITapGestureRecognizer があります。

UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(select)];
singleTap.numberOfTapsRequired = 1;
singleTap.delegate = self;

[self addGestureRecognizer:singleTap];

現在、一番上のカスタム UIImageView のみがタップされ、ポップオーバーが表示されています。

4

2 に答える 2

2

どの画像がどの画像であるかをどのように特定するつもりだったのかはわかりませんが、この例ではタグを使用しました。以下は、スクロールビュー内のタッチの位置を受け取り、そのポイントをスクロールビューサブビューの画像ビューのフレームと比較します。次に、変更可能な配列に一致した画像のタグを追加します。

注:アラートを閉じるときにこの配列を空にしないと、新しいオブジェクトが継続的に追加されます。

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    UITouch *touch = [[event allTouches] anyObject];
    CGPoint location = [touch locationInView:myScrollView];

    for (UIImageView *myImageView in myScrollView.subviews) {
        if (CGRectContainsPoint(myImageView.frame, location)) {
            [someMutableArray addObject:[NSNumber numberWithInteger:myImageView.tag]];
        }
    }
}
于 2012-09-11T20:29:19.490 に答える
1

あなたの質問では、ビューが透明であるため、実際にオーバーラップがあることをユーザーが確認でき、オーバーラップの領域を意図的にタップする可能性があると想定しています。

いずれにせよ、この場合に行う必要があるのは、タップの位置を取得することです。

[tapGesture locationInView:scrollView]

次に、scrollView の subView 配列を調べて、各 UIImageView を取得し、そのフレームを取得して、タップがそのフレーム内にあるかどうかを確認します。

これで、可能な画像の配列ができました。アクション シート (何でも) をポップして、ユーザーにどれを表示するかを尋ねることができます。

于 2012-09-11T20:31:58.660 に答える