В приложении для визуализации, которое я пишу, я хочу сформировать графику, используя подложку, созданную с помощью контура. Рисунок представляет собой горизонтальную прямоугольную полосу с различными формами, нарисованными внутри. На вершине этой прямоугольной полосы я хочу нарисовать эллипс, который будет действовать как мат, который формирует прямоугольную полосу, чтобы она выглядела нарисованной внутри эллипса. Как мне это сделать?
В этом упрощенном примере я пытаюсь - и не могу сделать фоновый синий прямоугольник в виде синих эллипсов, рисуя поверх него эллипс, используя различные режимы наложения.
- (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);
}
Спасибо,
Дуг
ОБНОВЛЕНИЕ: РЕШЕНИЕ
Вкратце: обтравочные контуры. Dooh! Следующий фрагмент кода создает эффект, после которого я получаю синий эллипс на красном фоне. Обратите внимание, что синий эллипс создается путем ограничения синего прямоугольника формой эллипса. Это то, что мне нужно. Круто.
Надеюсь, это поможет кому-то еще. Обтравочные контуры супер мощные. Приветствия.
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);