Ich habe eine einfache Ansicht (linke Seite des Bildes) und ich muss eine Art Überlagerung (rechte Seite des Bildes) zu dieser Ansicht erstellen. Diese Überlagerung sollte eine gewisse Deckkraft haben, damit die Ansicht darunter teilweise noch sichtbar ist. Am wichtigsten ist, dass diese Überlagerung in der Mitte ein kreisförmiges Loch aufweist, damit sie nicht die Mitte der Ansicht überlagert (siehe Bild unten).
Ich kann leicht einen Kreis wie diesen erstellen:
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;
Und eine "volle" rechteckige Überlagerung wie diese:
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];
Aber ich habe keine Ahnung, wie ich diese beiden Ebenen kombinieren kann, damit sie den gewünschten Effekt erzielen. Jemand? Ich habe wirklich alles versucht ... Vielen Dank für die Hilfe!
moveToPoint
fügen Sie dann das abgerundete Rect hinzu. Überprüfen Sie die Dokumente auf die von angebotenen Methoden UIBezierPath
.