ios uiscrollview uicollectionview uicollectionviewlayout uipinchgesturerecognizer

ios - Zoom en un UICollectionView bidimensional



uiscrollview uicollectionviewlayout (1)

Déjame ver si entiendo el problema. ¿Está intentando ampliar una celda específica cambiando el tamaño del elemento, pero el tamaño de TODAS las celdas está cambiando en lugar del tamaño pellizcado?

Si mi comprensión es correcta, entonces puedo ayudar. Cambiar FlowLayout.itemSize cambia el tamaño de todas las celdas en la vista de colección. Si desea establecer el tamaño del elemento de celdas específicas, debe reemplazar UICollectionViewDelegateFlowLayout''s sizeForItemAtIndexPath. En el método sizeForItemAtIndexPath, puede verificar el elementoAtIndexPath en la celda pellizcada y devolver un tamaño diferente solo para esa celda.

La otra parte de su pregunta (sobre desplazamiento y desplazamiento) no es muy clara para mí. Tiene razón en que se supone que las vistas de colección deben usarse horizontal o verticalmente, pero no ambas. Quizás eso es lo que causa el problema?

UICollectionView que es horizontal y vertical. Tiene diferentes UICollectionViewCells . Todo está trazado correctamente. Ahora estoy tratando de hacerlo zoomable . Las UICollectionViewCells se redimensionan correctamente. Cada vez que se UIPinchGesture el UIPinchGesture , configuro el itemSize dentro del UICollectionViewLayout en la scale .

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

Aquí puede ver el método setItemSize al que estoy llamando dentro de mi CustomLayout.

- (void)setItemSize:(CGSize)itemSize { if (CGSizeEqualToSize(self.itemSize, itemSize)) return; _itemSize = itemSize; // [self prepareLayout]; [self invalidateLayout]; }

Mi problema es saber, todos los elementos resize de resize a la parte inferior derecha y no sé cómo enfocarme exactamente en el elemento en el que estaba mi UIPinchGesture .

Traté de cambiar el contentOffset cada vez que el gesture esta manera:

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

Pero nunca logré permanecer en el CGPoint mi UIPinchGesture fue ejecutado.

Además, al scrolling por todo UICollectionView , mi contentOffset sigue siendo {0,0} cuando el scroll no termina. Así que empieza a pellizcar. Siempre termino en la esquina superior izquierda. Debido a que el UICollectionView parece no estar diseñado para ser utilizado horizontal y verticalmente al mismo tiempo, es por eso que tampoco puedo usar los métodos de delegate de UIScrollView para zooming . Tal vez alguien me puede decir cómo resolver este problema.