У меня есть UIView
, который программно рисует рисунок «sunburst», используя UIBezierPath
. Теперь я хотел бы расширить это, маскируя края градиентом - эффективно, чтобы каждый «взрыв» исчезал от непрозрачного до прозрачного. Я думаю, что это можно сделать с помощью маски CAGradientLayer
, но я не уверен, как сделать ее круговой.Circular CAGradientLayer Mask
Это то, что я пытаюсь - это маскирует вид, но градиент является линейным:
CAGradientLayer *l = [CAGradientLayer layer];
l.frame = CGRectMake(0.0f, 0.0f, rect.size.width, rect.size.height);
l.cornerRadius = rect.size.width/2.0f;
l.masksToBounds = YES;
l.colors = [NSArray arrayWithObjects:(id)[UIColor blackColor].CGColor, (id)[UIColor clearColor].CGColor, nil];
self.layer.mask = l;
Я открыт не с помощью CAGradientLayer
если кто-нибудь знает какие-нибудь другие способы замаскировать вид с круг с размытыми краями.
РЕШЕНИЕ Благодаря проницательности Мэтта, я закончил рисовать вид маски с использованием CGContextDrawRadialGradient
, делая это как UIImage
, и он используется в качестве маски слоя. Если кто-то заинтересован в этом процессе, он используется в this test project.
У меня такое ощущение, что CGContextDrawRadialGradient может быть для этого. Я попробую. – Keller
Я думаю, вы должны начать с CGContextDrawRadialGradient и * затем * размыть рисунок градиента с помощью CIFilter и использовать результат * этого * в качестве маски. :) – matt
Я ДЕЙСТВИТЕЛЬНО близко к этому, поэтому я принял ответ. Я использую CGContextDrawRadialGradient, чтобы просто нарисовать круговой градиент над моим оригинальным представлением «sunburst». По сути, это работает отлично, если я сопоставляю цвет градиента с цветом фона. Но как я мог бы использовать свой UIView для градиента для маскировки исходного UIView sunburst (вариант использования, если я использую это на не сплошном фоне)? – Keller