所以我有一个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;
}
}
}
但只有捏出代码才有效。我已经搜索了一个教程或代码,它引用了如何正确地执行此操作,但没有运气。
扩展集合如下所示:
答案 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是一个全局或静态变量,用于与新计算的距离进行比较;显然,如果距离大于前一个距离,则用户正在尝试展开集合视图(反之亦然)。
如果这似乎都不是问题,那么请提供扩展和折叠方法的代码。