如何着色动画UIImageView?

时间:2016-10-01 20:09:12

标签: ios swift xcode uiimageview uiimage

我尝试应用由编程加载的UIImageView组成的animationImages的色调。目前使用的是iOS 9.3。

我认为我已经尝试了在此处找到的所有解决方案,用于应用色调,包括:

  • 在加载时设置.renderMode:let newImage: UIImage? = UIImage(named: filename as String)!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
  • 在故事板中或以编程方式设置tintView 用:zeroImageView.tintColor = UIColor.redColor()
  • 通过UIImageView本身设置图像.renderMode: zeroImageView.image = zeroImageView.image!.imageWithRenderingMode(UIImageRenderingMode.AlwaysTemplate)
  • 通过Interface Builder设置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 个答案:

答案 0 :(得分:0)

如果下一步没有工作,我会以编程方式在UIImageView上放置一个空的UIView。首先,它不会干扰UIImageView中发生的任何事情。

我会在这里查看本教程:http://www.apptuitions.com/programmatically-creating-uiview-uislider-uiswitch-using-swift/

这将教你如何以编程方式将UIView添加到故事板。我会在viewDidLoad()方法中添加此代码。

你需要改变的主要是UIView的背景颜色。首先,你必须决定色调的颜色(从我在你的代码中看到的是红色),然后明确地改变颜色的'Alpha',使它几乎不显示。您更改'Alpha',因为这基本上是颜色的不透明度。

希望这有帮助。

答案 1 :(得分:0)

试试这个......

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
    }
}