Ios 具有外部起点的Fire UIPangestureRecognitor

Ios 具有外部起点的Fire UIPangestureRecognitor,ios,objective-c,uigesturerecognizer,uipangesturerecognizer,Ios,Objective C,Uigesturerecognizer,Uipangesturerecognizer,我的布局如下图所示: 黑色区域是一个摄像头,红色区域只是一个带有UIPangestureRecognitor的UIView,绿色区域是一个带有图像的UICollectionView 现在,如果用户按下红色区域并开始拖动,则所有布局都将移到顶部,并且当摄像头溢出设备屏幕时,用户可以在“收藏”视图中同时看到更多项目。所有的逻辑都已经完成了 我的问题是,即使用户开始在红色区域外拖动,我也需要相同的功能,即用户开始从设备底部拖动集合视图,以便显示更多项目,但如果用户到达(穿过、移动)红色区域,则Pan

我的布局如下图所示:

黑色区域是一个摄像头,红色区域只是一个带有UIPangestureRecognitor的UIView,绿色区域是一个带有图像的UICollectionView

现在,如果用户按下红色区域并开始拖动,则所有布局都将移到顶部,并且当摄像头溢出设备屏幕时,用户可以在“收藏”视图中同时看到更多项目。所有的逻辑都已经完成了


我的问题是,即使用户开始在红色区域外拖动,我也需要相同的功能,即用户开始从设备底部拖动集合视图,以便显示更多项目,但如果用户到达(穿过、移动)红色区域,则PangestureRecognitor应被触发。Instagram在从磁盘选择图像时具有此功能。是否有一种方法可以实现我所缺少的目标?我尝试用pointInside、ToucheSBegind和touchesMoved覆盖红色视图,但如果拖动来自集合视图,则会调用其中任何一个。SwipeGesture也不起作用。谢谢

您可以尝试以下方法:

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

谢谢工作得很有魅力