gpt4 book ai didi

iphone - 将触摸事件传递给 subview

转载 作者:行者123 更新时间:2023-12-03 21:23:40 24 4
gpt4 key购买 nike

我在 UIScrollView 中有一个 View ,当用户按下某个区域时,它会加载一个附加的 subview 。当这个附加 subview 可见时,我希望所有触摸事件都由该 subview 处理,而不是由 ScrollView 处理。

看起来前几个事件是由 subview 处理的,但是随后调用了 touchesCancelled 并且 ScrollView 接管了触摸检测。

如何确保只要在该 View 上执行移动事件, subview 就能获取所有事件?

这是我在 touchesMoved 上的实现 - 我认为它可以完成这项工作...

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[touches allObjects] objectAtIndex:0];
CGPoint touchPt = [touch locationInView:self];

UIView *hitView = [self hitTest:touchPt withEvent:event];
UIView *mySubView = subviewCtrl.view;

if(hitView == mySubView) {
[subviewCtrl.view touchesMoved:touches withEvent:event];
}
else {
NSLog(@"Outside of view...");
}
}

最佳答案

响应者链层次结构“通常”从 subview 到 super View ,因此您不需要在 super View 中进行 hitTest。您遇到的问题不是您需要 super View 来调用 subview 上的touchesMoved,而是 UIScrollView 通过拦截触摸事件来颠覆正常的响应者链层次结构,以便为用户提供平滑的滚动体验。如果您不希望出现此行为,则可以通过向 ScrollView 发送以下消息来禁用此行为:

[scrollView setDelaysContentTouches:NO];

请注意,这将确保您的 subview 首先能够处理相关事件(前提是它实际上是第一响应者)。然而,这可能会对scrollView的滚动和缩放性能产生负面影响,这可能就是Apple默认将其设置为YES的原因。

关于iphone - 将触摸事件传递给 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2587832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com