Как разместить представление на обратной стороне UICollectionViewCell

В моем приложении есть некоторые UICollectionViewCells, отображающие некоторую информацию.

Когда пользователь нажимает кнопку на одном из них, я переворачиваю нажатые ячейки с помощью этого фрагмента кода:

UICollectionViewCell* cell = [collectionView cellForItemAtIndexPath:indexPath];

[UIView animateWithDuration:1.0
                      delay:0
                    options:(UIViewAnimationOptionAllowUserInteraction)
                 animations:^
                {
                     NSLog(@"starting animation");

                    [UIView transitionFromView:cell.contentView
                                        toView:cell.contentView
                                      duration:.5
                                       options:UIViewAnimationOptionTransitionFlipFromRight
                                    completion:nil];
                }
                 completion:^(BOOL finished)
                {
                     NSLog(@"animation end");
                }
 ];

После того, как ячейка переворачивается (что происходит правильно), ячейка становится полностью белой.

Два вопроса по этому поводу: - почему ячейка белая после флипа. Разве он не должен отображать исходную информацию, поскольку fromView равен toView? - как лучше отображать различный контент на обратной стороне ячейки. Я полагаю, что в UICollectionViewCell нет ссылки на cell.contentViewBack...


person murze    schedule 05.01.2013    source источник


Ответы (1)


у вас может быть это сейчас, но,

Не уверен, что это «лучший» способ сделать это, я заставил это работать, создав собственный UICollectionViewCell, имея 2 UIImageViews в пользовательской ячейке и ориентируясь на эти представления в анимации (это работает только для вас, если это все, что вы хотите иметь в своих клетках - может поможет, может нет, кому угодно)

Создайте новый класс UICollectionViewCell (мой называется CardCVCell). В CardCVCell.h поместите в свои выходы UIImageView

@property (strong, nonatomic) IBOutlet UIImageView *cardImage;
@property (strong, nonatomic) IBOutlet UIImageView *cardBackImage;

Я использовал раскадровку — там я набрал «CardCVCell» в качестве своего пользовательского класса в ячейке в представлении «Коллекция» в моей сцене.

В моем контроллере представления для этой сцены у меня есть код, указанный выше, но я использую UIImageViews в пользовательской ячейке для представлений в переходе (обратите внимание, что вы должны привести UICollectionViewCell к вашему пользовательскому классу

- (void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath
{
// animate the cell user tapped on
CardCVCell  *cell = (CardCVCell *)[collectionView cellForItemAtIndexPath:indexPath];

         [UIView transitionFromView:cell.cardBackImage
                             toView:cell.cardImage
                           duration:.5
                            options:UIViewAnimationOptionTransitionFlipFromRight
                         completion:^(BOOL finished)
          {
              if (finished) {
                  NSLog(@"animation end");
              }

          }
    ];    
}

Я надеюсь, что это поможет кому-то, если не вам, если я могу помочь, дайте мне знать.

ваше здоровье

person craigk    schedule 30.01.2013
comment
Это именно то, что мне нужно для обратной карточной игры. Спасибо, Крейг. голосую за тебя :) - person ; 13.05.2013
comment
Это отличное решение. Но у меня есть один вопрос. Как узнать, какой вид сейчас впереди? (Нужно создать некоторую структуру данных, чтобы сохранить статус?) - person Bagusflyer; 11.03.2015
comment
UIViewAnimationOptions.ShowHideTransitionViews — это ключ. - person Bagusflyer; 11.03.2015