У меня есть простой вид (левая часть рисунка), и мне нужно создать какой-то наклад (справа от рисунка) к этому виду. Этот оверлей должен иметь некоторую непрозрачность, так что вид ниже он все еще частично виден. Самое главное, что наложение должно иметь круглое отверстие посередине, чтобы он не перекрывал центр обзора (см. Рисунок ниже).CALayer с прозрачным отверстием в нем
Я могу легко создать круг, как это:
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;
и «полный» прямоугольную накладку так:
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];
Но я понятия не имею, как я могу объединить эти два слоя так они создают эффект, который я хочу. Кто угодно? Я пробовал действительно все ... Большое спасибо за помощь!
Вы можете создать один Безье, который содержит прямоугольник и круг, а затем обмотку правило используется во время рисования создает отверстие (я не пробовал). – Wain
Я не знаю, как это сделать :) –
Создайте с помощью rect, затем 'moveToPoint', затем добавьте закругленный прямоугольник. Проверьте документы для методов, предложенных 'UIBezierPath'. – Wain