2015-11-19 51 views
1

我有一个UICollectionViewController和一个UIImageView作为IBOutlet在每个单元格内。我为图像视图设置了imageView.adjustsImageWhenAncestorFocused = true,并且当相关单元聚焦时,图像视图变得太大。只是想知道是否有任何方法来控制图像视图的动画行为。我知道我可以覆盖didUpdateFocusInContext(_:withAnimationCoordinator:),但无法找到如何处理悬停事件。
任何帮助,将不胜感激。如何在UICollectionViewCell中关注UIImageView的默认动画行为?

回答

1

因此,使用​​函数来更新您的细胞,当焦点在当前选定的单元格。

先为图像视图禁用adjustsImageWhenAncestorFocused属性,然后根据您的愿望更改imageview的大小。

定义两种不同的尺寸,并将其用于聚焦细胞和细胞的其余部分。

CGSize originalCellSize = CGSizeMake(225, 354); 
CGSize focusCellSize = CGSizeMake(240, 380); 

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator 
{ 
    [coordinator addCoordinatedAnimations:^{ 
     if (self.focused) { 
      self.imageView.frame.size = focusCellSize; 
     } else { 
      self.imageView.frame.size = originalCellSize; 
     } 
    } completion:nil]; 
} 

使用animatewithDuration:以提供更好的动画风格,当你更改单元格大小或使用字母或阴影的更完美的外观为ImageView的效果。

0

也许更好的解决方案是用单元格(或单元格的contentView)上的CGAffineTransform来处理这个问题。这样你就不需要改变视图框架(你也可以在self.imageView.transform上进行转换,如果这更适合你的话)。

#pragma mark - UIFocusEnvironment 

- (void)didUpdateFocusInContext:(UIFocusUpdateContext *)context withAnimationCoordinator:(UIFocusAnimationCoordinator *)coordinator { 
    if (self.focused) { 
     [coordinator addCoordinatedAnimations:^{ 
      self.transform = CGAffineTransformMakeScale(1.1f, 1.1f); 
     } completion:nil]; 
    } else { 
     [coordinator addCoordinatedAnimations:^ { 
      self.transform = CGAffineTransformMakeScale(1.f, 1.f); 
     } completion:nil]; 
    } 
}