2

我創建了一個水平和垂直的UICollectionView。它有不同的UICollectionViewCells。一切都是正確的。現在我正在努力使它zoomableUICollectionViewCells也正確調整大小。每當發生UIPinchGesture時,我都將itemSize設置在scale的依賴項UICollectionViewLayout之內。放大二維UICollectionView

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

在這裏,您可以看到方法setItemSize我打電話我CustomLayout內。

- (void)setItemSize:(CGSize)itemSize 
{ 
    if (CGSizeEqualToSize(self.itemSize, itemSize)) return; 

    _itemSize = itemSize; 

// [self prepareLayout]; 
    [self invalidateLayout]; 
} 

我的問題是知道的,所有項目resize到右側底部,我不知道如何準確焦點的元素我UIPinchGesture爲上。

我想盡了gesture occures這樣的時間來改變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]; 

但我從來沒有設法留在CGPointUIPinchGesture被執行死刑。

此外,當scrolling對整個UICollectionView,我contentOffset仍然{0,0}scroll並沒有結束。所以開始捏我總是在左上角。 因爲UICollectionView似乎不被設計爲同時使用水平和垂直,這就是爲什麼我也不能使用UIScrollViewdelegate方法zooming。 也許有人可以告訴我如何解決這個問題。

回答

0

讓我看看我是否理解這個問題。您正嘗試通過更改項目大小來放大特定單元格,但是所有單元格的大小都在變化,而不是被捏住的大小?

如果我的理解是正確的,那麼我可以幫忙。更改FlowLayout.itemSize可更改集合視圖中所有單元的大小。如果你想設置特定單元格的項目大小,你應該重寫UICollectionViewDelegateFlowLayout的sizeForItemAtIndexPath。在sizeForItemAtIndexPath方法中,您可以針對被捏住的單元格檢查itemAtIndexPath,併爲該單元格返回不同的大小。

你的問題的其他部分(關於滾動和偏移量)對我來說並不是很清楚。你是對的,集合視圖應該被水平或垂直使用,但不能同時使用。也許這是導致問題的原因?