vuelve volver viajero vacio tercera subclases subclase restaurado obtener llegar fragmento enfoque destiny desbloquear como cambiar iphone objective-c ios uicollectionview uicollectionviewcell

iphone - volver - ¿Cómo puedo personalizar el estado de selección de mi subclase UICollectionViewCell?



volver al fragmento del viajero destiny 2 (4)

Tengo una subclase UICollectionViewCell personalizada que sobrescribe initWithFrame: y layoutSubviews para configurar sus vistas. Sin embargo, ahora estoy tratando de hacer dos cosas con las que estoy teniendo problemas.

1) Estoy intentando personalizar el estado de UICollectionViewCell al seleccionarlo. Por ejemplo, quiero cambiar una de las imágenes en un UIImageView en el UICollectionViewCell .

2) Quiero animar (light bounce) el UIImage en el UICollectionViewCell .

¿Alguien puede señalarme en la dirección correcta?

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { MyCollectionViewCell *cell = (MyCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath]; [cell setSelected:YES]; }


Agregue un método público performSelectionAnimations a la definición de MyCollectionViewCell que cambia el UIImageView deseado y realiza la animación deseada. Luego collectionView:didSelectItemAtIndexPath: desde collectionView:didSelectItemAtIndexPath:

Así que en MyCollectionViewCell.m:

- (void)performSelectionAnimations { // Swap the UIImageView ... // Light bounce animation ... }

Y en tu UICollectionViewController :

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { MyCollectionViewCell *cell = (MyCollectionViewCell *)[collectionView cellForItemAtIndexPath:indexPath]; [cell performSelectionAnimations]; }

Note que he sacado la llamada a [cell setSelected:YES] , ya que eso ya debe ser atendido por UICollectionView. De la documentación:

La forma preferida de seleccionar la celda y resaltarla es usar los métodos de selección del objeto de vista de colección.


En su subclase UICollectionViewCell personalizada, puede implementar didSet en la propiedad isSelected .

Swift 3:

override var isSelected: Bool { didSet { if isSelected { // animate selection } else { // animate deselection } } }

Swift 2:

override var selected: Bool { didSet { if self.selected { // animate selection } else { // animate deselection } } }


En su subclase UICollectionViewCell personalizada, podría anular el setSelected: así:

- (void)setSelected:(BOOL)selected { [super setSelected:selected]; if (selected) { [self animateSelection]; } else { [self animateDeselection]; } }

Descubrí que al tocar repetidamente este método se invoca en una celda, incluso si ya está seleccionado, por lo que quizás desee verificar que realmente está cambiando de estado antes de disparar animaciones no deseadas.


Si desea mostrar la animación en la selección, el siguiente método podría serle útil:

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"cell #%d was selected", indexPath.row); // animate the cell user tapped on UICollectionViewCell *cell = [collectionView cellForItemAtIndexPath:indexPath]; [UIView animateWithDuration:0.8 delay:0 options:(UIViewAnimationOptionAllowUserInteraction) animations:^{ [cell setBackgroundColor:UIColorFromRGB(0x05668d)]; } completion:^(BOOL finished){ [cell setBackgroundColor:[UIColor clearColor]]; } ]; }