1

所以我有一个UICollectionView并且我希望用户能够伸出或收缩来展开和折叠收集单元格。我使用本教程来执行展开和折叠位。哪个有效。然后我将下面的代码添加到我的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;
        }
    }
}

但只有捏出代码有效。我已经搜索了有关如何正确执行此操作但没有运气的教程或代码。

扩展集合如下所示:

在此处输入图像描述

4

1 回答 1

0

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

[gesture setDelegate:self];

我很确定规模的负值是没有意义的。比例通常以百分比形式使用,标准化为 0 到 1 之间的值。我必须查看您折叠和展开集合视图的方法;但是,如果您使用手势的 scale 属性来调整集合视图的大小,则只需修复错误的数学即可。

如果您使用属性值 -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 是一个全局或静态变量,用于与新计算的距离进行比较;显然,如果距离大于之前的距离,那么用户正在尝试扩展集合视图(反之亦然)。

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

于 2016-12-13T00:23:17.310 回答