拍摄UICollectionViewCell的快照

时间:2015-10-28 10:07:07

标签: swift uicollectionview tvos

我正在制作一个tvOS应用程序,我希望它看起来与电影应用程序类似。因此我有一个UICollectionView。现在我的细胞不仅仅是简单的UIImageView,而且更复杂一些。

我仍然希望获得良好的焦点视觉效果(当用户滑动遥控器时,使细胞图像变大并对其产生光照效果)。所以我要做的是渲染我的单元格,然后拍摄它的快照,然后显示此快照而不是单元格本身。我就是这样做的:

extension UIView {
    var snapshot : UIImage {
        UIGraphicsBeginImageContextWithOptions(bounds.size, true, 0.0)
        drawViewHierarchyInRect(self.bounds, afterScreenUpdates: true)
        let image = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return image
    }
}

...

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    let cell = NSBundle.mainBundle().loadNibNamed("ContentCell", owner: self, options: nil)[0] as! ContentCell
    cell.update()
    let cellSnapshot = cell.snapshot

    let snapshotCell = collectionView.dequeueReusableCellWithReuseIdentifier("SnapshotCell", forIndexPath: indexPath) as! SnapshotCell
    snapshotCell.snapshotImageView.image = cellSnapshot
    return snapshotCell
}

然而,所有这一切都显示出一个黑色的细胞。我可能做错了什么想法?

1 个答案:

答案 0 :(得分:4)

你应该看here

在Swift中,它会像那样:

extension UIView {
    var snapshot : UIImage? {
        var image: UIImage? = nil
        UIGraphicsBeginImageContext(bounds.size)
        if let context = UIGraphicsGetCurrentContext() {
            self.layer.renderInContext(context)
            image = UIGraphicsGetImageFromCurrentImageContext()
        }
        UIGraphicsEndImageContext()
        return image
    }
}