放大二维UICollectionView

时间:2014-03-12 16:55:37

标签: ios uiscrollview uicollectionview uicollectionviewlayout uipinchgesturerecognizer

我创建了一个水平和垂直的UICollectionView。它有不同的UICollectionViewCells。一切都是正确的。现在我想尝试zoomableUICollectionViewCells也会正确调整大小。每次发生UIPinchGesture时,我都会在itemSize的{​​{1}}内设置UICollectionViewLayout

scale

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

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

我的问题是知道,所有项目- (void)setItemSize:(CGSize)itemSize { if (CGSizeEqualToSize(self.itemSize, itemSize)) return; _itemSize = itemSize; // [self prepareLayout]; [self invalidateLayout]; } 都在右下方,我不知道如何准确关注我的resize所在的元素。

每当UIPinchGesture发生时,我都会尝试更改contentOffset

gesture

但我从来没有设法留在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时,UICollectionViewcontentOffset未结束时仍为{0,0}。所以开始捏我总是在左上角。 由于scroll似乎不是设计为同时使用水平和垂直,这就是为什么我也无法使用UICollectionView delegate UIScrollView方法来zooming 。 也许有人可以告诉我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

让我看看我是否理解这个问题。您试图通过更改项目大小来放大特定单元格,但所有单元格的大小是否正在变化而不是被挤压的单元格?

如果我的理解是正确的,那么我可以提供帮助。更改FlowLayout.itemSize会更改集合视图中所有单元格的大小。如果要设置特定单元格的项目大小,则应覆盖UICollectionViewDelegateFlowLayout的sizeForItemAtIndexPath。在sizeForItemAtIndexPath方法中,您可以针对被挤压的单元格检查itemAtIndexPath,并为该单元格返回不同的大小。

你问题的另一部分(关于滚动和偏移)对我来说并不是很清楚。你是对的,集合视图应该是水平或垂直使用,而不是两者都使用。也许这就是造成这个问题的原因?