如何将UIView中的触摸传递给UIScrollView

Sim*_*mon 5 iphone objective-c uiscrollview uiview

类似于这个线程和许多其他线程,我有一个带有NIB文件的视图控制器,它具有这种布局......

  • 一个.UIView(480 x 320) - 存储背景图像
  • 湾 UIScrollView(480 x 220) - 是一个关卡选择器scrollview
  • C.UIView(480 x 320) - 包含前景动画图形

上面的所有三个项目都是NIB中主视图的子视图.UIView(c)是iPhone屏幕的完整大小,位于层次结构之上.在它上面,我放置了一个基于该视图中当前触摸位置动画的角色.然而问题是,在这个视图接收触摸时,我无法触及它下面的ScrollView(b).我仍然需要使用(c)中的触摸,但还需要将相关的触摸/滑动传递到下面的UIScrollView.

任何人都可以建议如何做到这一点?我已经阅读了有关使用hittest的各种帖子,但不想完全抵消这些触摸,我只需要转发它们,以便滚动视图仍能正常工作.

谢谢,

jus*_*tin 1

如果是我,我会将scrollView 设置为顶部视图的委托。当然,这需要顶视图是 的自定义子类UIView,因此您可以设置

id delegate; 
Run Code Online (Sandbox Code Playgroud)

@property (nonatomic, assign) id delegate;
Run Code Online (Sandbox Code Playgroud)

在头文件中。然后,您可以将scrollView设置为委托,并使用以下内容

[topView setDelegate:scrollView];
Run Code Online (Sandbox Code Playgroud)

完成此操作后,您就可以在需要时将消息(在您的情况下为触摸事件)发送到滚动视图。例如,如果您想发送所有 touchBegan 事件,则可以这样:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self.delegate touchesBegan:touches withEvent:event];
}
Run Code Online (Sandbox Code Playgroud)

当然,如果您只想传递某些事件,您可以在方法中设置参数来说明何时调用[self.delegate ....][super ....]。后者将为视图而不是滚动视图执行操作。我希望这有帮助