gpt4 book ai didi

iOS - UIScrollView hitTest 不包含触摸

转载 作者:行者123 更新时间:2023-11-29 10:42:37 26 4
gpt4 key购买 nike

我有一个 UIScrollView,其中包含 UIView。 UIScrollView 启用了双指滚动。每个 UIView 都有一个 panGestureRecognizer。我想要以下功能:

如果两点触控平移 --> 滚动。

如果单点触摸 pan && 触摸 UIView --> 触发 UIView 的 panGestureRecognizer。

我想通过覆盖 UIScrollView 的 hitTest 来做到这一点。如果触摸次数大于 1,则返回可能滚动的 UIScrollView。如果触摸次数为 1,则返回正常的 hitTest 结果以可能触发 UIView 的 panGestureRecognizer。但是我的 UIScrollView 的 hitTest 代码从来没有任何接触! (虽然我成功地双指滚动,但 hitTest 没有任何接触。)

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
NSSet *touches = [event touchesForView:self];
NSLog(@"%@", touches);
if ([touches count] > 1)
{
return self;
}
UIView *usualView = [super hitTest:point withEvent:event];
return usualView;
}

最佳答案

HitTest 是一种低级别的可覆盖方法,用于处理触摸,或者更确切地说,用于检测触摸的目的地。您无法在此处知道触摸次数 - event 参数无用。相反,每次触摸都会调用两次,这意味着双击会调用 4 次。它不适用于检测内部的多个触摸或手势,仅适用于触摸的目的地。

默认实现类似于:

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
if (self.hidden || !self.userInteractionEnabled || self.alpha < 0.01 || ![self pointInside:point withEvent:event] || ![self _isAnimatedUserInteractionEnabled]) {
return nil;
} else {
for (UIView *subview in [self.subviews reverseObjectEnumerator]) {
UIView *hitView = [subview hitTest:[subview convertPoint:point fromView:self] withEvent:event];
if (hitView) {
return hitView;
}
}
return self;
}
}

关于iOS - UIScrollView hitTest 不包含触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23790283/

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