iPhone Кварц. Как создать подложку с использованием пути, а не растрового изображения? - PullRequest
0 голосов
/ 17 декабря 2009

В приложении для визуализации, которое я пишу, я хочу сформировать графику, используя подложку, созданную с помощью контура. Рисунок представляет собой горизонтальную прямоугольную полосу с различными формами, нарисованными внутри. На вершине этой прямоугольной полосы я хочу нарисовать эллипс, который будет действовать как мат, который формирует прямоугольную полосу, чтобы она выглядела нарисованной внутри эллипса. Как мне это сделать?

В этом упрощенном примере я пытаюсь - и не могу сделать фоновый синий прямоугольник в виде синих эллипсов, рисуя поверх него эллипс, используя различные режимы наложения.

- (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);

1 Ответ

0 голосов
/ 17 декабря 2009

Вкратце: обтравочные контуры. 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);
...