当UIImageView聚焦在UICollectionViewCell内时,如何更改UIImageView的默认动画行为?

时间:2015-11-19 18:11:52

标签: uiimageview uicollectionviewcell tvos

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

2 个答案:

答案 0 :(得分:1)

因此,在关注当前所选单元格时,使用didUpdateFocusInContext函数更新单元格。

首先禁用图片视图的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中使用Alpha或阴影效果以获得更完美的外观。

答案 1 :(得分: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];
    }
}