我的布局如下图所示:
黑色区域是相机,红色区域只是带有UIPanGestureRecognizer的UIView,绿色区域带有图像的UICollectionView。
现在,如果用户按下红色区域并开始拖动,则所有布局都会移到顶部,当相机溢出设备屏幕时,用户可以立即在集合视图中看到更多项目。所有逻辑都已完成。
我的问题是,即使用户开始在红色区域外拖动,我想要相同的功能,即用户开始从设备底部拖动集合视图,以便显示更多项目,但如果用户到达(交叉,移动)红色区域,然后PanGestureRecognizer应该被解雇。从磁盘中选择图像时,Instagram具有此功能。有没有办法实现这一点,我失踪了?我尝试使用pointInside,touchesBegan和touchesMoved覆盖红色视图,但如果拖动来自集合视图,则会调用其中任何一个。 SwipeGesture也不起作用。谢谢!
答案 0 :(得分:3)
您可以尝试以下方法:
1)将您想要激活的PanGesture(红色)添加到集合视图中:
[self.collectionView addGestureRecognizer:redPanGesture];
2)在PanGesture激活时调用的方法中,对其进行过滤,以便只有当手指位于红色区域的顶部时才执行逻辑:
CGPoint location = [recognizer locationInView:self.redView];
if(location.y > self.redView.frame.size.height)
{
[(UIPanGestureRecognizer *)recognizer setTranslation:CGPointZero inView:self.view];
return;
}
3)将您的班级设置为PanGesture的代表:
redPanGesture.delegate = self;
4)实现下面的方法,否则集合视图不会滚动:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer
shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer
{
return YES;
}