UICollectionviewCell Animations

ios uicollectionview uicollectionviewcell uiviewanimation caanimation

1761 просмотра

2 ответа

294 Репутация автора

Я хочу анимировать ячейки коллекции, анимация должна быть такой:

Появляются первые ячейки, а затем, после некоторой задержки , появляется вторая ячейка с некоторыми анимациями , так будет и для всех ячеек.

Как этого добиться?

Автор: Diksha Источник Размещён: 18.07.2016 11:09

Ответы (2)


1 плюс

3456 Репутация автора

Решением было бы создание источника данных постепенно, чтобы вы добавляли ячейку после установленной временной задержки. После добавления вставьте

Сделайте вызов, чтобы настроить таймер для добавления в ваш источник данных с любой задержкой, которую вы хотите

[NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(addToDataSource:) userInfo:nil repeats:YES];

Затем в рамках этого метода, который будет срабатывать каждые 0,05 секунды (в этом примере)

-(void)addToDataSource:(NSTimer*)timer{

    [self.yourMutableDataSourceArray addObject:OBJECT]

    NSInteger arrayCount = self.yourMutableDataSourceArray.count;

        [self.collectionView performBatchUpdates:^{
            [self.collectionView insertItemsAtIndexPaths:@[[NSIndexPath indexPathForItem:arrayCount-1 inSection:0]]];
        } completion:^(BOOL finished) {

        }];

    //Once you have reached the desired count cells you wish, remember to invalidate the timer

}

Это performBatchUpdateбудет означать, что collectionView будет перезагружен с анимацией.

надеюсь, это поможет

Это в Objective-C, хотя те же принципы применяются, если вы пишете это в быстром

Автор: Jim Tierney Размещён: 18.07.2016 11:31

1 плюс

41 Репутация автора

Другое решение здесь использует willDisplayCell:forIndexPathделегат

Вот пример того, как я это делаю.

func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
    if (!loadedIdx.contains(indexPath.row)) {
        let cellContent = cell
        let rotationAngleDegrees : Double = -30
        let rotationAngleRadians = rotationAngleDegrees * (M_PI/180)
        let offsetPositioning = CGPoint(x: collectionView.bounds.size.width, y: -20)
        var transform = CATransform3DIdentity
        transform = CATransform3DRotate(transform, CGFloat(rotationAngleRadians), -50, 0, 1)
        transform = CATransform3DTranslate(transform, offsetPositioning.x, offsetPositioning.y, -50)

        cellContent.layer.transform = transform
        cellContent.layer.opacity = 0.2

        let delay = 0.06 * Double(indexPath.row)
        UIView.animateWithDuration(0.8, delay:delay , usingSpringWithDamping: 0.8, initialSpringVelocity: 0.5, options: .CurveEaseIn, animations: { () -> Void in
            cellContent.layer.transform = CATransform3DIdentity
            cellContent.layer.opacity = 1
        }) { (Bool) -> Void in

        }

        loadedIdx.append(indexPath.row)
    }

}

Загруженный идентификатор - это массив, чтобы пометить ячейку как загруженную (не анимированную при следующем появлении).

Автор: EricNguyen Размещён: 18.07.2016 05:26
Вопросы из категории :
32x32