В приложении визуализации, которое я пишу, я хочу сформировать графику, используя подложку, созданную с помощью пути. Графика представляет собой горизонтальную прямоугольную полосу с нарисованными внутри различными фигурами. Поверх этой прямоугольной полосы я хочу нарисовать эллипс, который будет действовать как подложка, формирующая прямоугольную полосу, чтобы она казалась нарисованной внутри эллипса. Как мне это сделать?
В этом упрощенном примере я пытаюсь - и не могу сделать так, чтобы фоновый синий прямоугольник отображался в виде синих эллипсов, рисуя эллипс поверх него, используя различные режимы наложения.
- (void)drawRect:(CGRect)rect {
CGContextRef context = UIGraphicsGetCurrentContext();
[[colorDictionary objectForKey:@"blueSolid"] setFill];
CGContextFillRect(context, self.bounds);
//CGContextSetBlendMode(context, kCGBlendModeNormal);
CGContextSetBlendMode(context, kCGBlendModeDestinationIn);
CGContextFillEllipseInRect(context, self.bounds);
}
Спасибо, Дуг
ОБНОВЛЕНИЕ: РЕШЕНИЕ Вкратце: обтравочные контуры. Ду! Следующий фрагмент кода создает эффект, к которому я стремлюсь: синий эллипс на красном фоне. Обратите внимание, что синий эллипс создается путем приведения синего прямоугольника к форме эллипса. Это то, что мне нужно. Прохладный.
Надеюсь, это поможет кому-то другому. Обтравочные контуры обладают супер мощным эффектом. Ваше здоровье.
CGContextRef context = UIGraphicsGetCurrentContext();
[[colorDictionary objectForKey:@"redSolid"] setFill];
CGContextFillRect(context, self.bounds);
CGContextBeginPath(context);
CGContextAddEllipseInRect(context, CGRectInset(self.bounds, 32, 32));
CGContextClip(context);
[[colorDictionary objectForKey:@"blueSolid"] setFill];
CGContextFillRect(context, self.bounds);