Reputation: 6119
I'm basically trying to achieve this effect. It can be done with pretty much a PNG with a transparent hole cut through it, then stacked on top of a photo.jpg UIView. OR, I've also seen a method where you can directly create a mask with CGImageMaskCreate
. I don't want to use that feature because I want the user to be able to interact with the photo.jpg layer (by moving it, rotating it, etc.):
Its essentially two UIViews stacked directly on top of each other.
However, what if rather than using blue, I wanted to use another color, or even pattern an image with [UIColor colorPatternWithImage:]
for the masking layer? I wouldn't want to make a million different PNGs for each case.
Would I need some way to programmatically recreate my mask? Is there some way to convert my mask shapes into code? Any help is appreciated. Thanks
Upvotes: 0
Views: 384
Reputation: 185811
CALayer
has a property called mask
, which is another CALayer
that defines the mask to use. You could use a CAShapeLayer
to define the mask, then set that as the mask
of another layer that renders your obscuring image/color/pattern/whatever. You could also use a regular CALayer
as the mask with your semi-transparent image as the contents, it depends on whether or not you want the ability to customize the size/shape of the hole.
Caveats: CAShapeLayer
is slower than normal layers, and mask
is slower than non-masking as well. You may need to make sure performance is acceptable for you. You may also want to try out the shouldRasterize
flag, though this will only improve performance (at the cost of memory) as long as the layer is static (i.e. not animating).
Upvotes: 4