Айфон Кварц. Как создать подложку, используя путь, а не растровое изображение?

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

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

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

person dugla    schedule 17.12.2009    source источник
comment
Я ответил на свой вопрос, внимательно изучив документацию по программированию Quartz. Надеюсь, это поможет кому-то.   -  person dugla    schedule 17.12.2009


Ответы (1)


Вкратце: обтравочные контуры. Ду! Следующий фрагмент кода создает эффект, к которому я стремлюсь: синий эллипс на красном фоне. Обратите внимание, что синий эллипс создается путем приведения синего прямоугольника к форме эллипса. Это то, что мне нужно. Прохладный.

Надеюсь, это поможет кому-то другому. Обтравочные контуры очень мощные. Ваше здоровье.

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);
person dugla    schedule 17.12.2009