Анимированная ячейка просмотра коллекции tvOS

Я пытаюсь анимировать ячейку представления коллекции, пока это мой код

- (void)collectionView:(UICollectionView *)collectionView didUpdateFocusInContext:(UICollectionViewFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator{

    UICollectionViewCell *nextFocusedCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"VideoCell" forIndexPath:context.nextFocusedIndexPath];
    UICollectionViewCell *previousFocusedCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"VideoCell" forIndexPath:context.previouslyFocusedIndexPath];
    if (context.nextFocusedView) {
        [coordinator addCoordinatedAnimations:^{
            [nextFocusedCell setFrame: CGRectMake(3, 14, 300, 300)];
        } completion:^{
            // completion
        }];
    } else if (context.previouslyFocusedView) {
        [coordinator addCoordinatedAnimations:^{
            [previousFocusedCell setFrame: CGRectMake(3, 14, 100, 100)];
        } completion:^{
            // completion
        }];
    }

Но мой код не работает. Я прочитал документацию, и в ней говорится, что нужно реализовать что-то вроде if (self == contextFocusedView)...... но в нем есть предупреждение о том, что несовместимый указатель View Controller с UIView. Может ли кто-нибудь сказать мне, что не так с моим кодом и как это исправить? Спасибо!!


person Jenel Ejercito Myers    schedule 18.10.2015    source источник
comment
Я не думаю, что вы должны иметь else if, а просто if.   -  person Banana    schedule 26.10.2015


Ответы (3)


dequeueReusableCellWithReuseIdentifier: вернет не текущий, а новый вид. Попробуйте использовать cellForItemAtIndexPath:

Но почему бы не использовать:

if (context.nextFocusedView) {
    [coordinator addCoordinatedAnimations:^{
        context.nextFocusedView.transform = CGAffineTransformMakeScale(1.1, 1.1);
    } completion:nil];
}
if (context.previouslyFocusedView) {
    [coordinator addCoordinatedAnimations:^{
        context.previouslyFocusedView.transform = CGAffineTransformMakeScale(1.0, 1.0);
    } completion:nil];
}
person hanneskl    schedule 08.11.2015
comment
Вы, сэр, заслуживаете медали! Спасибо! :) Это будет масштабировать всю ячейку, включая метки, вместо того, чтобы показывать эффект только на изображении, и оставит другие объекты без изменений. - person Steven B.; 19.08.2016

Так что я в конце концов понял это. У меня был UIImage в моем collectionView. Одним из свойств UIImage для tvOS является AdjustsImageWhenAncestorFocused. Итак, если вы установите это в своем viewDidLoad, например:

    _imageView.adjustsImageWhenAncestorFocused = Yes;

Кроме того, установите флажок «Корректирует изображение при фокусировке» в раскадровке. это сфокусирует изображение. Я не пробовал это для этикеток. или любые другие элементы, которые вы можете добавить в ячейку представления коллекции, но я уверен, что есть что-то подобное.

Удачного программирования, ребята! (:

person Jenel Ejercito Myers    schedule 21.10.2015
comment
Что делать, если в ячейке нет изображения? - person Alizain Prasla; 16.12.2016
comment
@AlizainPrasla я программно увеличивал и уменьшал размер просмотров. похоже на ответ ниже - person Jenel Ejercito Myers; 16.12.2016
comment
Да, я получил ваш ответ, но что, если в ячейке нет изображения. Как это может работать, если у меня нет IBoutlet uimageview - person Alizain Prasla; 17.12.2016

Swift 2.0 версия ответа hanneski:

override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    if (context.nextFocusedView != nil) {
        coordinator.addCoordinatedAnimations({() -> Void in
            context.nextFocusedView!.transform = CGAffineTransformMakeScale(1.1, 1.1)
            }, completion: { _ in })
    }
    if (context.previouslyFocusedView != nil) {
        coordinator.addCoordinatedAnimations({() -> Void in
            context.previouslyFocusedView!.transform = CGAffineTransformMakeScale(1.0, 1.0)
            }, completion: { _ in })
    }
}

Это будет масштабировать всю ячейку, включая все метки...

person Steven B.    schedule 19.08.2016