2

Je suis en train d'animer une cellule de vue collection, ceci est mon code jusqu'à présentcellule de vue Collection animée 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 
     }]; 
    } 

Mais mon code ne fonctionne pas. J'ai lu la documentation et il dit d'implémenter quelque chose comme if (self == contextFocusedView) ...... mais il a un avertissement disant que pointeur incompatible View Controller à UIView. Quelqu'un pourrait s'il vous plaît me dire ce qui ne va pas avec mon code & comment y remédier? Merci!!

+0

Je ne pense pas que vous devriez avoir 'else if' mais plutôt' if'. – Banana

Répondre

3

Donc j'ai fini par comprendre. J'ai eu un UIImage dans ma collectionView. L'une des propriétés d'un UIImage pour tvOS est adjustImageWhenAncestorFocused. Donc, si vous définissez dans votre viewDidLoad comme:

_imageView.adjustsImageWhenAncestorFocused = Yes; 

Sinon, cochez la case « Permet de régler l'image lorsqu'elle se concentre » dans votre story-board. Cela va focaliser l'image. Je ne l'ai pas essayé pour les étiquettes. ou tout autre élément que vous pouvez ajouter dans une cellule View View, mais je suis sûr qu'il y a quelque chose de similaire.

Bonne programmation les gars! (:.

+0

Que faire s'il n'y a pas d'image par cellule? –

+0

@AlizainPrasla ce que j'ai fait était par programme augmenter et diminuer la taille des vues. semblable à la réponse ci-dessous –

+0

Oui j'ai eu votre réponse mais que s'il n'y a pas d'image dans la cellule. Comment peut-il fonctionner car je n'ai aucun IBoutlet d'uimageview –

4

dequeueReusableCellWithReuseIdentifier: ne reviendra pas au courant, mais une nouvelle vue Essayez d'utiliser cellForItemAtIndexPath:

Mais pourquoi ne pas utiliser:

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]; 
} 
+0

Vous monsieur, méritez une médaille! Merci! :) Cela mettra à l'échelle la cellule entière, y compris les étiquettes, au lieu de montrer seulement l'effet sur une vue d'image et laisser les autres objets inchangés –

0

Version Swift 2.0 de la réponse 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 }) 
    } 
} 

Cela va mettre à l'échelle la cellule entière, y compris toutes les étiquettes ...