0

我最近回来测试一个视图控制器,该控制器以前工作并获取本地保存的视频文件,从该文件创建缩略图,并使用testButton.backgroundColor = UIColor(patternImage: image!)where将缩略图显示为 UIButton 的背景颜色image = generateThumbnail()。现在,由于某种原因,当我尝试将图像转换为背景颜色的图案时,背景颜色变为黑色,没有图像。

如果我使用诸如UIColor(patternImage: (UIImage(named: "Picture"))(而不是从中生成的 UIImage generateThumbnail())之类的资产,则按预期将背景颜色设置为图像。

下面是我的 generateThumbnail()

private func generateThumbnail(url: URL) -> UIImage? {

        let videoAsset : AVAsset = AVAsset(url: url)
        let assetImageGenerator : AVAssetImageGenerator = AVAssetImageGenerator(asset: videoAsset)
        assetImageGenerator.appliesPreferredTrackTransform = true

        var time = videoAsset.duration
        time.value = min(time.value, 2)

        do{
            let thumbnail = try assetImageGenerator.copyCGImage(at: time, actualTime: nil)
            let framedThumbnail : UIImage = UIImage(cgImage: thumbnail)
            return framedThumbnail
        } catch {
            print("Error saving thumbnail \(error.localizedDescription)")
            return nil
        }

    }

这是将 UIImage 传递给 backgroundColor 的示例 - 这会产生黑色背景


let urlTest = Bundle.main.url(forResource: "SampleVideo", withExtension: "mp4")!     
let image = generateThumbnail(url: urlTest)
let testButton = UIButton()
testButton.frame = CGRect(x: 0, y: 0, width: 400, height: 300)
testButton.backgroundColor = UIColor(patternImage: image!)

从资产文件加载本地图像的示例 - 正确生成,图像设置为按钮的背景:

let image = UIImage(named: "Sample")
let testButton = UIButton()
testButton.frame = CGRect(x: 0, y: 0, width: 400, height: 300)
testButton.backgroundColor = UIColor(patternImage: image!)

是的,urlTest运行时确实会生成图像generateThumbnail。我可以让它UIImageView()按预期在测试中显示,不知道为什么设置为背景颜色时它会变黑

tl;dr 为什么我创建的缩略图图像不会显示为按钮的背景,而资产图像会显示?

编辑:解决了问题

使用.setBackgroundImageUIButton 上的方法。解决的例子:

let urlTest = Bundle.main.url(forResource: "SampleVideo", withExtension: "mp4")!     
let image = generateThumbnail(url: urlTest)
let testButton = UIButton()
thumbButton.setBackgroundImage(image, for: .normal)

我不记得以前在 UIButton 上看到过该方法作为选项,可能是 Swift 5 中的新方法¯\_(ツ)_/¯

4

0 回答 0