放大一个二维UICollectionView
我创build了一个横向和纵向的UICollectionView
。 它有不同的UICollectionViewCells
。 一切都是正确的。 现在我正在努力使其变得可zoomable
。 UICollectionViewCells
也正确resize。 每当UIPinchGesture
发生时,我itemSize
在UICollectionViewLayout
依赖项的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成同时使用水平和垂直的,所以我也不能使用UIScrollView
的delegate
方法进行zooming
。 也许有人可以告诉我如何解决这个问题。
让我看看我是否明白这个问题。 您正在尝试通过更改项目大小来放大特定单元格,但是所有单元格的大小都在变化,而不是被捏住的大小?
如果我的理解是正确的,那么我可以帮忙。 更改FlowLayout.itemSize将更改集合视图中所有单元的大小。 如果你想设置特定单元格的项目大小,你应该重写UICollectionViewDelegateFlowLayout的sizeForItemAtIndexPath。 在sizeForItemAtIndexPath方法中,您可以针对被捏的单元格检查itemAtIndexPath,并为该单元格返回不同的大小。
你的问题的其他部分(关于滚动和抵消)是不是真的清楚。 你是对的,收集意见应该是水平或垂直使用,但不是两个。 也许这是导致问题的原因?