0

わかりましたこれは簡単な作業ですが、それは私を狂わせてきました。

私が達成しようとしているのは、画面の横と下にある静的な透明ツールバーの後ろに表示されるUIScrollViewだけです。構造は現在、scrollView(UIScrollViewのサブクラス)とoverlay(UIViewのサブクラス)の両方がRootViewControllerのサブビューになるように設定されています。

scrollView = [[EMDrawScrollView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
scrollView.userInteractionEnabled = YES;
[self.view addSubview:scrollView]; 

overlay = [[EMDrawOverlayView alloc]initWithFrame:CGRectMake(0, 0, winSize.width, winSize.height)];
overlay.userInteractionEnabled = NO;
[self.view addSubview:overlay];

問題は、overlay.userInteractionEnabledを有効にすると、すべてのタッチがレイヤーに移動し、scrollViewに到達できないことです。しかし、ユーザーの操作をオフにすると、scrollViewは正しく機能しますが、オーバーレイを操作できません。

タッチの処理に関しては、RootViewControllerを使用してこれらを収集し、次のように正しいオブジェクトに送信しています。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *t1 = [[[event allTouches]allObjects]objectAtIndex:0];
    CGPoint loc = [t1 locationInView:self.view];
    if (CGRectContainsPoint(overlay.rightToolbar.frame, loc)) {
        overlayTouched = YES;
        [overlay touchesBegan:touches withEvent:event];  
    }  else {
        overlayTouched = NO;
        [scrollView touchesBegan:touches withEvent:event];
    }
}

ツールバーを個別のUIViewとして設定し、それらをサブビューとしてView Controllerに追加して、オーバーレイが画面全体を占めないようにすることが1つの修正になると思いますが、別の方法がある場合はこれを避けたいと思います。

4

1 に答える 1

1

OK ....この質問に対する簡単な答えはないようです。質問で述べたように、フレームサイズがほんの一部のUIViewとしてオーバーレイを追加することで、この問題を解決しました。そのスーパービューのサイズ。

これは、タッチを検出できたため、最終的にはうまく機能しました。タッチがどのビューにあるかに応じてタッチを開始し、touchsMovedとtouchsEndがそのビューに残り、ユーザーの操作を大幅に制御できるようになりました。

于 2012-07-16T00:04:33.943 に答える