确定何时将UIView拖到UICollectionViewCell之上

时间:2014-05-07 18:56:44

标签: ios objective-c uicollectionview uipangesturerecognizer

我有一个可拖动的视图(UIImageView),我使用UIPanGestureRecognizer和这个方法来控制它的定位和拖动:

- (void)imageDragged:(UIPanGestureRecognizer *)gesture
{
    UIImageView *img = (UIImageView *)gesture.view;
    CGPoint translation = [gesture translationInView:img];
    img.center = CGPointMake(img.center.x + translation.x,
                           img.center.y + translation.y);
    // reset translation
    [gesture setTranslation:CGPointZero inView:img];
}

除了可拖动的视图外,我还有一个UICollectionView,当然是由UICollectionViewCells构建的。我试图做的是识别我的可拖动视图何时被拖动到其中一个集合视图单元格上。

我想在imageDragged方法中添加一个布尔值,以了解当前正在拖动视图的时间,但我无法弄清楚如何知道我的拖动触摸何时位于集合视图单元格的顶部。 UICollectionView具有didSelect委托方法,但如果我的单击没有出现在单元格上,那么这对我没有帮助,但在我的可拖动视图上。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

我将此代码段放在imageDropped方法中以实现我想要的功能(感谢Martin的帮助):

CGPoint tapCoordinates = [gesture locationInView:self.view];
NSArray * visibleCells = [self.collectionView visibleCells];
for(UICollectionViewCell *cell in visibleCells) {
    CGRect frame = [self.collectionView convertRect:cell.frame toView:self.view];
    if(CGRectContainsPoint(frame, tapCoordinates)) {
        NSLOG(@"Success");
        break;
    }
}

答案 1 :(得分:1)

我不知道是否有更整洁的方式,但也许你可以获得拖动的点和/或拖动的UIView角上的一些点,然后使用CGRectContainsPoint来查看这些点是否在矩形内集合视图单元格。