放大一个二维UICollectionView

我创build了一个横向和纵向的UICollectionView 。 它有不同的UICollectionViewCells 。 一切都是正确的。 现在我正在努力使其变得可zoomableUICollectionViewCells也正确resize。 每当UIPinchGesture发生时,我itemSizeUICollectionViewLayout依赖项的scale设置itemSize

 TestLayout *layout = (TestLayout *) self.collectionViewLayout; CGSize newItemSize = CGSizeMake(_sizeItem.width * gesture.scale, _sizeItem.height * gesture.scale); [layout setItemSize:newItemSize]; 

在这里你可以看到我在CustomLayout中调用的setItemSize方法。

 - (void)setItemSize:(CGSize)itemSize { if (CGSizeEqualToSize(self.itemSize, itemSize)) return; _itemSize = itemSize; // [self prepareLayout]; [self invalidateLayout]; } 

我的问题是知道,所有项目resize到右下angular,我不知道如何专注于我的UIPinchGesture上的元素。

每次gesture发生时,我都试图改变contentOffset

 CGPoint posInView = [gesture locationInView:self]; CGPoint pointPinchTouch = CGPointMake(posInView.x - self.contentOffset.x, posInView.y - self.contentOffset.y); CGPoint newOffset = CGPointMake(self.contentOffset.x * (gesture.scale * 2), self.contentOffset.y * (gesture.scale * 2)); [self setContentOffset:newOffset animated:NO]; 

但我从来没有设法留在CGPoint我的UIPinchGesture被执行。

此外,当scrolling整个UICollectionView ,当scroll没有结束时,我的contentOffset仍然是{0,0} 。 所以开始捏我总是在左上angular。 因为UICollectionView似乎并不是被devise成同时使用水平和垂直的,所以我也不能使用UIScrollViewdelegate方法进行zooming 。 也许有人可以告诉我如何解决这个问题。

让我看看我是否明白这个问题。 您正在尝试通过更改项目大小来放大特定单元格,但是所有单元格的大小都在变化,而不是被捏住的大小?

如果我的理解是正确的,那么我可以帮忙。 更改FlowLayout.itemSize将更改集合视图中所有单元的大小。 如果你想设置特定单元格的项目大小,你应该重写UICollectionViewDelegateFlowLayout的sizeForItemAtIndexPath。 在sizeForItemAtIndexPath方法中,您可以针对被捏的单元格检查itemAtIndexPath,并为该单元格返回不同的大小。

你的问题的其他部分(关于滚动和抵消)是不是真的清楚。 你是对的,收集意见应该是水平或垂直使用,但不是两个。 也许这是导致问题的原因?