3

私が現在持っているもの:

UIViewControllerメインの中に子供がいUIViewControllerます。この子UIViewControllerには がありますがUITableView、その中には何でもあります ( UIScrollViewUIImageView、異なるUIViewsサブクラスの構成)。

私のメインUIViewControllerには がGestureRecognizerDelegateあるので、ジェスチャーが行われると、次のようにコールバックを受け取ります。

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer movedWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer endWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

@optional

- (void)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer beganWithTouches:(NSSet*)touches andEvent:(UIEvent *)event;

メインの上で行われる特定のジェスチャーについてUIViewController、私UIViewUIImageView. したがって、基本的に、Y < 100 で上から下にタッチすると、UIView がアニメーション化されて画像が表示され、画面から指を離すと、UIView上に戻ります。Apple が提供する通知センターによく似ていますが、スクロールを制御できず、上から 200 ピクセルしか表示されない点が異なります。

問題:

理論的にUIViewは、 が階層UIImageの最上位にありますが、その領域に指を置いて動き続けると、その下にある が動いているUIViewのが見えます。でこれらのジェスチャーをキャプチャする必要があるためUITableView、私にとっては意味がありません。UIViewUIImageView

私が欲しいもの:

を表示するUIViewと、そのUIImage上のすべての相互作用が無効になりchildViewControllerます。

私が試したこと:

現在、私はこれを持っています:

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    return YES;
}

NO にするUIViewと、UIImageは表示されません。

のようなものを入れるとmyChildViewController.view.userInteractionEnabled = NO、ジェスチャーはすでに開始されているため、機能しません。もちろん、ジェスチャーが開始される前にそれを使用すると、すべてが意図したとおりに機能します。しかし、問題は、私が使用できないことUITableViewです.

4

1 に答える 1

1

さて、最終的に機能しているのは次のとおりです。

   -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
    // Check if I am not on the Default state (UIView with the UIImageView hidden)
    if(currentState != kDefaultState)
    {
        otherGestureRecognizer.enabled = NO;
        [arrayOfDisabledGestures addObject:otherGestureRecognizer];
    }

    return YES;
}

最後に を閉じるUIViewUIImageView、次のようになります。

[arrayOfDisabledGestures makeObjectsPerformSelector:@selector(setEnabled:) withObject:@YES];

すべてのジェスチャーを再度有効にするには。私は解決策があまり好きではありません。これを行う他の方法があるはずです(そしてきっとあると思います)。

于 2013-01-08T07:36:05.103 に答える