Adding a mask with CALayers
20,370
Solution 1
Try
maskLayer.contents = (id)mask.CGImage;
Yes, the cast sucks, but it's necessary.
I think you'll also need to say
maskLayer.bounds = (CGRect){CGPointZero, mask.size};
Solution 2
try this:
CALayer *maskLayer = [CALayer layer];
UIImage *mask = [UIImage imageNamed:@"mask.png"];
maskLayer.contents = (id)mask.CGImage;
// maskLayer.contentsGravity = kCAGravityCenter;
maskLayer.frame = CGRectMake(0.0, 0.0,1024,768);
UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
viewToMask.image = [UIImage imageNamed:@"picture.png"];
viewToMask.layer.mask = maskLayer;
[self.view addSubview:viewToMask];
you also need to set mask frame
Author by
user339946
Updated on March 07, 2020Comments
-
user339946 about 4 years
I seem to be having difficulties adding a mask via CALayers. I'm simply trying to mask a UIImageView. Here's my code:
CALayer *maskLayer = [CALayer layer]; UIImage *mask = [UIImage imageNamed:@"mask.png"]; maskLayer.contents = mask; UIImageView *viewToMask = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)]; viewToMask.image = [UIImage imageNamed:@"picture.png"]; viewToMask.layer.mask = maskLayer; [self.view addSubview:viewToMask];
Mask.png is black with a transparent circle punched through it (is this correct way to mask?). I'm not sure where this is failing, perhaps at
maskLayer.contents
since its supposed to be aCGImageRef
but I get errors when I set it asmask.CGImage
, or through a local variableCGImageRef = mask.CGImage
. Anyway, the way its set now doesn't give errors, so I hope its fine.Does anyone know what's going on, or how to properly set masks with CALayers? Thanks