从UICollectionView挤入和挤出

时间:2013-03-30 11:11:19

标签: ios ipad uicollectionview uipinchgesturerecognizer

所以我有一个UICollectionView,我希望用户可以扩展或折叠收集单元格。我用了this tutorial to perform the expanding and collapsing bit。哪个有效。然后我将下面的代码添加到我的collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath委托方法中。

UIPinchGestureRecognizer *pinchGesture = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchCollection:)];
[cell addGestureRecognizer:pinchGesture];

然后像这样创建了动作pinchCollection:

-(void)pinchCollection:(id)sender {
    UIPinchGestureRecognizer *gesture = (UIPinchGestureRecognizer*)sender;
    if (gesture.state == UIGestureRecognizerStateBegan) {        
        if (gesture.scale <= -1) { // I also changed this to be gesture.scale < 1 but it didn't work. 
            // pinch in
            [self collapseCollection];
            gesture.scale = 1;

        }
        if (gesture.scale >= 1) { // I changed this to be gesture.scale > 1 but it didn't work either. 
            // pinch out 
            [self expandCollection];
            gesture.scale = -1;
        }
    }
}

但只有捏出代码才有效。我已经搜索了一个教程或代码,它引用了如何正确地执行此操作,但没有运气。

扩展集合如下所示:

enter image description here

1 个答案:

答案 0 :(得分:0)

这不是答案,但缺少一件事:

[gesture setDelegate:self];

我很确定这个音阶的负值是没有意义的。比例通常用作百分比,标准化为0到1之间的值。我必须看到折叠和展开集合视图的方法;但是,如果您使用手势的缩放属性来调整集合视图的大小,那只需要修复错误的数学。

如果您使用属性值-1作为确定收缩方向的方法,那么这样做是一件简单的事情:

CGPoint p1 = [sender locationOfTouch:0 inView:self];
CGPoint p2 = [sender locationOfTouch:1 inView:self];
    
// Compute the new spread distance.
CGFloat xd = p1.x - p2.x;
CGFloat yd = p1.y - p2.y;
CGFloat distance = sqrt(xd*xd + yd*yd);

if (distance < previousDistance) {
// add collapse method call
} else {
// add expand method call
}

previousDistance = distance;

在此示例代码中,previousDistance是一个全局或静态变量,用于与新计算的距离进行比较;显然,如果距离大于前一个距离,则用户正在尝试展开集合视图(反之亦然)。

如果这似乎都不是问题,那么请提供扩展和折叠方法的代码。