5

これは私がやろうとしていることです:

サブビューでジェスチャの認識を開始し、指がサブビューを離れると、スーパービューが引き継いでジェスチャを処理できるようにします。それは可能ですか?

ここに画像の説明を入力

現時点では、ジェスチャーが開始されたビューが「勝ち」です。画面から指を離さずに、あるビューから別のビューに「その場で」ジェスチャを「引き渡す」方法はありますか?

これは簡単なデモのコードです:

@implementation SPWKViewController {
    UIView *_innerView;
    UIPanGestureRecognizer *_outerGestureRecognizer;
    UIPanGestureRecognizer *_innerGestureRecognizer;

    UILabel *_label;
}

- (void)loadView
{
    [super loadView];

    self.view.backgroundColor = [UIColor yellowColor];

    _innerView = [[UIView alloc] initWithFrame:CGRectMake(50, 50, self.view.frame.size.width - 100, 200)];
    _innerView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    _innerView.backgroundColor = [UIColor greenColor];

    _label = [[UILabel alloc] initWithFrame:CGRectMake(0, 300, self.view.frame.size.width, 40)];
    _label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    _label.textAlignment = NSTextAlignmentCenter;
    _label.backgroundColor = [UIColor clearColor];

    [self.view addSubview:_innerView];
    [self.view addSubview:_label];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    _outerGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
    [self.view addGestureRecognizer:_outerGestureRecognizer];

    _innerGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handleGesture:)];
    [_innerView addGestureRecognizer:_innerGestureRecognizer];
}

- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer
{
    if (gestureRecognizer.state == UIGestureRecognizerStateChanged) {
        if (gestureRecognizer == _outerGestureRecognizer) {
            _label.text = @"outer";
        } else {
            _label.text = @"inner";
        }
    } else {
        _label.text = @"";
    }
}

@end

背景情報: 私が解決したい実際の問題は次のとおりです: UIScrollView の中に UIWebView を配置したいと思います。UIWebView の一番下までスクロールすると、親の UIScrollView が「引き継ぎ」、最初に画面から指を離すことなくスクロールし続ける必要があります。それを実現するには、ジェスチャーを UIWebView から親 UIScrollView に「引き渡す」必要があると考えました。

ありがとうございました!

4

0 に答える 0