手势识别器和在UIScrollView中禁用UIView的拖动手势

3

最近我遇到了一个问题,如何在UIScrollView的特定区域(尤其是由UIView或子视图占据的区域)中禁用滚动。 我阅读了许多关于子类化和其他较长方法来解决这个问题的文章。 但最近我采用了一种更简单的方法来解决这个问题,而不需要子类化:

UIPanGestureRecognizer *panrecognizer = [[UIPanGestureRecognizer alloc] init];

然后

[panrecognizer setCancelsTouchesinView:NO];
[mySubViewInScroll addGestureRecognizer:panrecognizer];

我创建了一个没有传递Action的UIPanGestureRecognizer,然后将识别器添加到滚动视图中的视图中。这样,视图上的手势将被捕获,但不会被视图或其父视图明确处理,因为我们没有向对象传递Action。

问题是这样的。这种处理方式是否正确?还是最好采取其他方式?我的意思是,苹果公司会接受这种方法的应用程序吗?


请问您能否澄清一下问题:您是指您想要一个UIView覆盖在UIScrollView的顶部,即不是UIScrollView的子视图,而是仅在其上方(即UIScrollView的兄弟视图)吗? - occulus
当然苹果会接受这种应用程序。只要你不开始挖掘他们庞大的框架来寻找未记录(并且很可能毫无价值)的滚动视图API,一切都会没问题的。 - CodaFi
不行。UIView是UIScrollView的子视图。我希望当我们在UIView本身上开始拖动时,UIView不会让其父UIScrollView滚动,但当我们在滚动视图的其他部分拖动时,它可以正常滚动,甚至UIView也会随着滚动而移动。 - Claudio Ferraro
2个回答

0
尝试重写ScrollView的代码
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event

返回 chi


为了提高您的回答质量,请说明您的帖子如何/为什么解决问题。 - Mick MacCallum

0
实际上,我认为这是最实用的解决方案,即使不是最好的解决方案。因为通过操纵类和子类来实现屏幕部分滚动锁定似乎非常奇怪。所以让我们看看苹果是否会接受这种解决方案...

Claudio,我遇到了类似的情况。Apple 的处理结果是什么?谢谢David。 - ICL1901

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接