Swift version: 5.1
All views have a
mask property that allows you to cut out parts depending on what you need. This mask can be any other kind of
UIView, so you could for example use a label to cut out an image view.
To try it out, first create a view with some obvious content such as a background color:
let redView = UIView(frame: CGRect(x: 50, y: 50, width: 128, height: 128)) redView.backgroundColor = .red view.addSubview(redView)
Now create your mask as a separate
UIView. Although it won’t be directly visible you should give this either a background color or some other content because the alpha channel of this mask determines what shows through in the original view.
To demonstrate this, here’s a mask view that’s the same size as the original view, but it’s offset 64 pixels to the right and has a 64-point corner radius. When used as a mask for the previous view it will have the effect of turning it into a semi-circle:
let maskView = UIView(frame: CGRect(x: 64, y: 0, width: 128, height: 128)) maskView.backgroundColor = .blue maskView.layer.cornerRadius = 64 redView.mask = maskView
The blue background color won’t be visible – that’s just there to make sure all pixels in the mask are opaque.
LEARN SWIFTUI FOR FREE I have a massive, free SwiftUI video collection on YouTube teaching you how to build complete apps with SwiftUI – check it out!
Available from iOS 8.0
This is part of the Swift Knowledge Base, a free, searchable collection of solutions for common iOS questions.