Tengo una vista simple (lado izquierdo de la imagen) y necesito crear algún tipo de superposición (lado derecho de la imagen) para esta vista. Esta superposición debería tener algo de opacidad, por lo que la vista que se encuentra debajo todavía es parcialmente visible. Lo más importante es que esta superposición debe tener un orificio circular en el medio para que no se superponga al centro de la vista (vea la imagen a continuación).
Puedo crear fácilmente un 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;
Y una superposición rectangular "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];
Pero no tengo idea de cómo puedo combinar estas dos capas para que creen el efecto que quiero. ¿Nadie? Lo he intentado todo ... ¡Muchas gracias por la ayuda!
moveToPoint
, luego agrega el rect redondeado. Consulte la documentación para conocer los métodos ofrecidos por UIBezierPath
.