tvOS视差效果用于细胞内UIImageView的子视图

时间:2016-10-30 21:03:11

标签: swift uiimageview focus uicollectionviewcell tvos

我有一个带UICollectionView的tvOS应用。在每个单元格内部都有UIImageView adjustsImageWhenAncestorFocused设置为true,这样可以在细胞聚焦时获得良好的视差效果。

我正在尝试在该图像的顶部添加一个横幅并让它"坚持"对它来说,视差也适用于它。

我尝试将其添加为子视图,将其添加为子图层,弄乱了约束,但没有任何效果。无论何时聚焦细胞,图像都会产生效果,横幅保持不动。

1 个答案:

答案 0 :(得分:4)

目前还没有办法将它添加到UIImageView,同时还能获得Apple的视差效果。

所以你必须以编程方式实现效果,或者使用CGContext在其上绘制图像和横幅。

我做后者在collectionViewCell中拥有圆形图像,同时保持Apple自己的视差效果。这有点像这样:

imageView.sd_setImage(with: URL(string:url), placeholderImage: UIImage(named: "placeholder"), options: SDWebImageOptions.avoidAutoSetImage) { [weak self] (image, error, cacheType, url) in
    if let image = image {
        if let strongself = self {
            UIGraphicsBeginImageContext(strongself.imageView.frame.size)
            if let ctx = UIGraphicsGetCurrentContext() {
                let layer = CALayer()
                layer.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: strongself.imageView.frame.size)
                layer.cornerRadius = 8
                layer.masksToBounds = true
                layer.contentsGravity = "resizeAspectFill"
                layer.contents = image.cgImage
                layer.render(in: ctx)
                let processedImage = UIGraphicsGetImageFromCurrentImageContext()
                UIGraphicsEndImageContext()
                strongself.imageView.image = processedImage
            }
        }
    }
}

确保在需要时将内容移动到后台线程,并且在加载图像时可能已重用某个单元格。因此,在loadImage完成处理程序中添加一个唯一ID的检查。