Добавление маски с помощью CALayers - PullRequest
12 голосов
/ 07 марта 2012

У меня, похоже, возникают проблемы с добавлением маски через CALayers Я просто пытаюсь замаскировать UIImageView. Вот мой код:

 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 черный с прозрачным кругом, пробитым через него (это правильный способ маскировки?). Я не уверен, где это терпит неудачу, возможно, в maskLayer.contents, так как он должен быть CGImageRef, но я получаю ошибки, когда я устанавливаю его как mask.CGImage, или через локальную переменную CGImageRef = mask.CGImage. Во всяком случае, то, как его набор теперь не дает ошибок, поэтому я надеюсь, что все в порядке.

Кто-нибудь знает, что происходит или как правильно установить маски с помощью CALayers? Спасибо

Ответы [ 2 ]

19 голосов
/ 07 марта 2012

Попробуйте

maskLayer.contents = (id)mask.CGImage;

Да, актерский состав отстой, но это необходимо.


Я думаю, тебе тоже нужно будет сказать

maskLayer.bounds = (CGRect){CGPointZero, mask.size};
13 голосов
/ 07 марта 2012

попробуйте это:

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];

вам также нужно установить рамку маски

...