3

ビューの下部にツールバーがあります。Scan と呼ばれる UIBarButton があり、誰かが指を押し下げているときと持ち上げたときを検出する必要があります。

UIBarButton は UIControl を継承しているため、これを検出できませんでした。回避策として、非表示の UIButton を作成してツールバーの上に配置し、UIBarButton の代わりにそこからのタッチを検出するだけにしました。

これは、ツールバーがどこにあるかを検出できない場合に、モーダル ビュー (UITabBar を非表示にする) としてビューを表示するまでは正常に機能します。ツールバーの上をタッチすると、正常に動作します。

これがスクリーンショットです。(見えないボタンは赤く色付けされ、テストのために背が高くなるように引き伸ばされています)

作業状態

下のスクリーンショットでは、ツールバーの場所をタッチしても何も起こりません。しかし、その上で赤くなっているところは完全に機能します。

ここに画像の説明を入力

これが私のコードの一部です。

    - (IBAction) scanTouchUp:(id)sender {
    [linea barcodeStopScan:nil];  
}

- (IBAction) scanTouchDown:(id)sender {
    [linea barcodeStartScan:nil];   
}

これらの方法は、それぞれ「タッチダウン」と「タッチアップ インサイド/アウトサイド」に付属しています。

どんな助けでも大歓迎です。

4

3 に答える 3

1

UIButton が親ビューの端を越えたり、別の子孫ビューの一部を覆っている場合は、ボタンのヒット テストが機能していない可能性があります。(つまり、ボタンは下部のバーの上部にあります)。

これらの問題は、ボタンがヒット テストであることを確認することで解決できます。hitTest:withEvent:ボタンを含むビューのメソッドをオーバーライドすることで、これを実行できる場合があります。これは次のようになります。

-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
  UIView *result = [redButton hitTest:[redButton convertPoint:point fromView:self] withEvent:event];
  if (result)
    return result;

  return [super hitTest:point withEvent:event];
}

これは、この変更を追加するビューが、特定のポイントを含む別のビューの前にヒット テストである場合にのみ機能します。

于 2013-09-28T19:12:57.877 に答える