gpt4 book ai didi

ios - 嵌套的 UIScrollView 在包含的页面上启用了 pagingEnabled 在页面更改后不会收到第一次底部滑动

转载 作者:行者123 更新时间:2023-11-29 02:41:59 32 4
gpt4 key购买 nike

我的应用程序遇到了一个小问题,该应用程序的结构有点复杂:

所以首先要考虑的是 View 雇佣体系:

|- 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:方法了吗?此方法可帮助您选择应接收触摸的 View 。

例如,您可以子类化 UIScrollView 并将您的 UIScrollView A 的类设置为您刚刚创建的新类。将下面的代码添加到此自定义 UIScrollView 类中,您可以将触摸传递到它的 subview 的第一个

- (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;
}

更多详细信息请查看WWDC - 高级 ScrollView 和触摸处理技术(本主题从 15:00 左右开始)。

另外,感谢 Tim Arnold寻找线索。

关于ios - 嵌套的 UIScrollView 在包含的页面上启用了 pagingEnabled 在页面更改后不会收到第一次底部滑动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647092/

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