Vergrößern Sie eine zweidimensionale UICollectionView

Ich habe eineUICollectionView das ist horizontal und vertikal. Es hat andersUICollectionViewCells. Alles ist richtig angeordnet. Jetzt versuche ich es zu schaffenzoomable. DasUICollectionViewCells werden auch richtig skaliert. Jedes Mal, wenn dieUIPinchGesture vorkommt, setze ich dieitemSize in derUICollectionViewLayout abhängig von derscale.

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

Hier sehen Sie die MethodesetItemSize Ich rufe in meinem CustomLayout an.

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

    _itemSize = itemSize;

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

Mein Problem ist, alle Artikel zu kennenresize rechts unten und ich weiß nicht, wie ich mich genau auf das Element konzentrieren sollUIPinchGesture war auf.

Ich habe versucht, das zu änderncontentOffset jedes mal diegesture kommt wie folgt vor:

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];

Aber ich habe es nie geschafft, auf dem Platz zu bleibenCGPoint meineUIPinchGesture wurde ausgeführt.

Außerdem wennscrolling im Großen und GanzenUICollectionView, meincontentOffset ist immer noch{0,0} wenn diescroll endete nicht. Also fang an zu kneifen, ich lande immer in der oberen linken Ecke. Weil dasUICollectionView scheint nicht dafür ausgelegt zu sein, horizontal und vertikal gleichzeitig verwendet zu werden, deshalb kann ich das auch nicht verwendendelegate Methoden vonUIScrollView zumzooming. Vielleicht kann mir jemand sagen, wie ich dieses Problem lösen kann.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage