Ios 嵌套的UIScrollView,其中一个不带分页功能';页面更改后,无法接收第一次底部滑动

Ios 嵌套的UIScrollView,其中一个不带分页功能';页面更改后,无法接收第一次底部滑动,ios,objective-c,iphone,cocoa-touch,uiscrollview,Ios,Objective C,Iphone,Cocoa Touch,Uiscrollview,我的应用程序结构有点复杂,我面临一个小问题: 因此,首先要考虑的是hirearchy的观点: |- UICollectionView (horizontal scrolling) -> UICollectionViewCell |-> UIScrollView A (PagingEnabled = YES, vertical scrolling only) |-> UIImageView = page 1 |-> UIScrollView B (Pa

我的应用程序结构有点复杂,我面临一个小问题:

因此,首先要考虑的是hirearchy的观点:

|- UICollectionView (horizontal scrolling)
 -> UICollectionViewCell
  |-> UIScrollView A (PagingEnabled = YES, vertical scrolling only)
    |-> UIImageView = page 1
    |-> UIScrollView B (PagingEnabled = NO, vertical scrolling only) = page 2
      |-> UIView (content...)
问题是,当我在UIScrollView A上滚动以显示第2页时,第一次滚动到“在UIScrollView B上查看底部”将被忽略,根本没有滚动,但第二次滚动具有正确的行为

我认为这是一种“聚焦”问题,但我不知道如何让它正常工作


关于如何将第2页上的第一次触碰赋予右UIScrollView的任何线索?

您是否尝试了
hitTest:withEvent:
方法?此方法可帮助您选择应接收触摸的视图

例如,您可以将
UIScrollView
子类化,并将UIScrollView A的类设置为刚刚创建的新类。将下面的代码添加到此自定义的
UIScrollView
类中,可以让您首先将触感传递到它的子视图

- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
    for (UIView *subView in self.subviews) {
        // Convert the point to the subView's coordinate system.
        CGPoint pointForTargetView = [subView convertPoint:point fromView:self];

        if (CGRectContainsPoint(subView.bounds, pointForTargetView)) {
            // Calling subView's hitTest:withEvent get the right view
            return [subView hitTest:pointForTargetView withEvent:event];
        }
    }

    UIView *hitView = [super hitTest:point withEvent:event];

//  // Uncomment if you want to make the view 'transparent' to touches:
//  // meaning the parts of the view without any subview will deliver the touch
//  // to the views 'behind' it
//  if (hitView == self) {
//      return nil;
//  }

    return hitView;
}
有关更多详细信息,请查看-高级滚动视图和触摸处理技术(本主题开始于15:00左右)


另外,感谢提供线索。

感谢您的回答和链接,我使用了另一个手势识别器,仅识别第一个手势,并通过设置内容偏移以编程方式滚动。你的代码绝对是一个更好的方式来执行这一点。没问题,我希望它将帮助其他人在未来。干杯