使用外部起点

时间:2015-07-23 15:18:32

标签: ios objective-c uigesturerecognizer uipangesturerecognizer

我的布局如下图所示:

question image

黑色区域是相机,红色区域只是带有UIPanGestureRecognizer的UIView,绿色区域带有图像的UICollectionView。

现在,如果用户按下红色区域并开始拖动,则所有布局都会移到顶部,当相机溢出设备屏幕时,用户可以立即在集合视图中看到更多项目。所有逻辑都已完成。

我的问题是,即使用户开始在红色区域外拖动,我想要相同的功能,即用户开始从设备底部拖动集合视图,以便显示更多项目,但如果用户到达(交叉,移动)红色区域,然后PanGestureRecognizer应该被解雇。从磁盘中选择图像时,Instagram具有此功能。有没有办法实现这一点,我失踪了?我尝试使用pointInside,touchesBegan和touchesMoved覆盖红色视图,但如果拖动来自集合视图,则会调用其中任何一个。 SwipeGesture也不起作用。谢谢!

1 个答案:

答案 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;
}