わかりましたこれは簡単な作業ですが、それは私を狂わせてきました。
私が達成しようとしているのは、画面の横と下にある静的な透明ツールバーの後ろに表示される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つの修正になると思いますが、別の方法がある場合はこれを避けたいと思います。