2

我创建了一个UICollectionView水平和垂直的。它有不同的UICollectionViewCells. 一切都布局正确。现在我正在努力做到这一点zoomable。也正确调整了UICollectionViewCells大小。每次发生这种UIPinchGesture情况时,我都会将itemSize内部UICollectionViewLayout依赖项设置为scale.

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都在右下角,我不知道如何准确地关注我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];

但我从来没有设法留在CGPointUIPinchGesture被处决的地方。

此外scrolling,总体而言UICollectionView,我contentOffset的仍然{0,0}scroll没有结束的时候。所以开始捏我总是在左上角结束。因为UICollectionView似乎不是设计为同时使用水平和垂直,这就是为什么我也不能使用for的delegate方法。也许有人可以告诉我如何解决这个问题。UIScrollViewzooming

4

1 回答 1

0

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

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

您问题的另一部分(关于滚动和偏移)对我来说并不是很清楚。你是对的,集合视图应该水平或垂直使用,但不能同时使用。也许这就是导致问题的原因?

于 2014-10-21T05:50:25.197 回答