如何为动画UIImageView添加色彩渲染?

3
我正在尝试对由程序加载的animationImages组成的UIImageView应用色调。目前使用的是iOS 9.3。
我认为我已经尝试了在此处找到的所有提议的解决方案,包括:
- 在加载时设置.renderMode:let newImage: UIImage? = UIImage(named: filename as String)!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) - 使用Storyboard或编程方式设置tintView:zeroImageView.tintColor = UIColor.redColor() - 通过UIImageView本身设置图像.renderMode:zeroImageView.image = zeroImageView.image!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate) - 通过接口生成器设置UIImageView的renderMode用户定义的运行时属性:imageRenderingMode Number 2
图像序列是具有透明度的PNG,因此,我想重新着色图像并保持透明度。
我没有成功,有点茫然。想知道这些方法是否仅适用于静止的UIAnimationView?非常感谢您的帮助!
以下是一些代码:
// Load all images
    while let element = enumerator.nextObject() as? String {
        if element.hasSuffix("png") {
            let filename: NSString = "Digits/0/" + element
            print(filename)
            imageNames.append(filename as String)
            let newImage: UIImage? = UIImage(named: filename as String)!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
            images.append(newImage!)
            zeroImageView.tintColor = UIColor.redColor()

        }
    }

// Make animated UIImageView
    zeroImageView.userInteractionEnabled = false
    zeroImageView.animationImages = images
    zeroImageView.animationDuration = 2.0
    zeroImageView.startAnimating()
    zeroImageView.tintColor = UIColor.redColor()
2个回答

1
尝试一下这个...
extension UIImage {
    func image(withTint tint: UIColor) -> UIImage? {
        guard let cgImage = cgImage else {
            return nil
        }

        UIGraphicsBeginImageContextWithOptions(size, false, scale)
        guard let context = UIGraphicsGetCurrentContext() else {
            return nil
        }

        let rect = CGRect(origin: .zero, size: size)

        context.translateBy(x: 0, y: size.height)
        context.scaleBy(x: 1.0, y: -1.0)
        context.setBlendMode(.normal)
        context.clip(to: rect, mask: cgImage)
        tint.setFill()
        context.fill(rect)

        let image = UIGraphicsGetImageFromCurrentImageContext()!
        UIGraphicsEndImageContext()
        return image
    }
}

0
如果以上方法都不起作用,下一步我会在UIImageView上编程地放置一个空的UIView。首先,它不会干扰UIImageView中正在进行的任何操作。
我建议你查看这个教程:http://www.apptuitions.com/programmatically-creating-uiview-uislider-uiswitch-using-swift/。这将教你如何在Storyboard中编程地添加一个UIView。我会在viewDidLoad()方法中添加这段代码。
主要需要更改的是UIView的背景颜色。首先,你需要决定色调的颜色(从你的代码中我看到是红色),然后明确地改变颜色的“Alpha”,使其几乎不可见。你改变“Alpha”是因为它基本上是颜色的不透明度。
希望这能帮到你。

谢谢你的建议!不幸的是,我正在尝试对一张带透明度的图像进行自定义颜色设计。我相信这种方法是在图像顶部应用一个着色的矩形,从而着色我的透明图像背后的“背景”? - E.R.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接