Idiot
Idiot

Reputation: 11

Create a masked UIView

I am attempting to do something that I thought would be possible, but have no idea how to start.

I have created a UIView and would like it to be filled with colour, but in the shape defined by an image mask. i.e. I have a PNG with alpha, and I would like the UIView I have created to be UIColor.blue in the shape of that PNG.

To show just how stupid I am, here is the absolute rubbish I have attempted so far - trying to generate just a simple square doesn't even work for me, hence it's all commented out.

let rocketColourList: [UIColor] = [UIColor.blue, UIColor.red, UIColor.green, UIColor.purple, UIColor.orange]
    var rocketColourNum: Int = 0
    var rocketAngleNum: Int = 0
    var rocketAngle: Double {
        return Double(rocketAngleNum) * Double.pi / 4
    }
   var rocketColour = UIColor.black
    public func drawRocket (){
        rocketColour.set()
        self.clipsToBounds = true
        self.backgroundColor = UIColor.red
        imageView.image = UIImage(named: ("rocketMask"))
        addSubview(imageView)
        //maskimage.frame = self.frame
        //let someRect = CGRect (x: 1, y: 1, width: 1000, height: 1000)
        //let someRect = CGRect (self.frame)
        //let fillPath = UIBezierPath(rect:someRect)
        //fillPath.fill()
        //setNeedsDisplay()

    }
}

Upvotes: 1

Views: 68

Answers (1)

Vasilii Muravev
Vasilii Muravev

Reputation: 3163

Set image as template, then set tint color for UIImageView. Something like that:

guard let let image = UIImage(named: "rocketMask")?.withRenderingMode(.alwaysTemplate) else { return }
imageView.image = image
imageView.tintColor = .blue

Also you can do that through the images assets: enter image description here

Upvotes: 1

Related Questions