我创建了一个水平和垂直的UICollectionView
。它有不同的UICollectionViewCells
。一切都是正确的。现在我想尝试zoomable
。 UICollectionViewCells
也会正确调整大小。每次发生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
时,UICollectionView
在contentOffset
未结束时仍为{0,0}
。所以开始捏我总是在左上角。
由于scroll
似乎不是设计为同时使用水平和垂直,这就是为什么我也无法使用UICollectionView
delegate
UIScrollView
方法来zooming
。
也许有人可以告诉我如何解决这个问题。
答案 0 :(得分:0)
让我看看我是否理解这个问题。您试图通过更改项目大小来放大特定单元格,但所有单元格的大小是否正在变化而不是被挤压的单元格?
如果我的理解是正确的,那么我可以提供帮助。更改FlowLayout.itemSize会更改集合视图中所有单元格的大小。如果要设置特定单元格的项目大小,则应覆盖UICollectionViewDelegateFlowLayout的sizeForItemAtIndexPath。在sizeForItemAtIndexPath方法中,您可以针对被挤压的单元格检查itemAtIndexPath,并为该单元格返回不同的大小。
你问题的另一部分(关于滚动和偏移)对我来说并不是很清楚。你是对的,集合视图应该是水平或垂直使用,而不是两者都使用。也许这就是造成这个问题的原因?