Tenho uma visão simples (lado esquerdo da imagem) e preciso criar algum tipo de sobreposição (lado direito da imagem) para essa visão. Esta sobreposição deve ter alguma opacidade, de forma que a vista abaixo dela ainda seja parcialmente visível. O mais importante é que essa sobreposição deve ter um orifício circular no meio dela para que não sobreponha o centro da vista (veja a imagem abaixo).
Posso facilmente criar um círculo como este:
int radius = 20; //whatever
CAShapeLayer *circle = [CAShapeLayer layer];
circle.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0,radius,radius) cornerRadius:radius].CGPath;
circle.position = CGPointMake(CGRectGetMidX(view.frame)-radius,
CGRectGetMidY(view.frame)-radius);
circle.fillColor = [UIColor clearColor].CGColor;
E uma sobreposição retangular "completa" como esta:
CAShapeLayer *shadow = [CAShapeLayer layer];
shadow.path = [UIBezierPath bezierPathWithRoundedRect:CGRectMake(0, 0, view.bounds.size.width, view.bounds.size.height) cornerRadius:0].CGPath;
shadow.position = CGPointMake(0, 0);
shadow.fillColor = [UIColor grayColor].CGColor;
shadow.lineWidth = 0;
shadow.opacity = 0.5;
[view.layer addSublayer:shadow];
Mas não tenho ideia de como posso combinar essas duas camadas para que criem o efeito que desejo. Qualquer um? Eu tentei realmente de tudo ... Muito obrigado pela ajuda!
moveToPoint
, adicione o retângulo arredondado. Verifique os documentos para os métodos oferecidos por UIBezierPath
.