CGContextDrawRadialGradient не рендеринг альфа в PDF?
У меня есть следующий рисунок, который визуализирует круг с полным цветом в центре, исчезая до 0 альфа по краям. Рисуя это на экране, он выглядит идеально. Однако когда я рисую то же самое в контексте PDF (CGPDFContextCreate), весь круг получается непрозрачным. Если я нарисую какой-либо другой обычный путь в PDF, то альфа отдает штрафы. Так что просто градиент не работает. Это ошибка или я что-то упустил?
CGColorSpaceRef myColorspace = CGColorSpaceCreateDeviceRGB();
size_t num_locations = 2;
CGFloat locations[2] = { 1.0, 0.0 };
CGColorRef color = [[UIColor redColor]CGColor];
CGFloat *k = (CGFloat *)CGColorGetComponents(color);
CGFloat components[8] = { k[0], k[1], k[2], 0.0, k[0], k[1], k[2], 1.0 };
CGGradientRef myGradient = CGGradientCreateWithColorComponents(myColorspace, components, locations, num_locations);
CGPoint c = CGPointMake(160, 160);
CGContextDrawRadialGradient(pdfContext, myGradient, c, 0, c, 60, 0);
1 ответ
Официальный ответ технической поддержки Apple:
Кварц игнорирует альфа-значение цветов в градиентах (или затенениях) при захвате градиента (или затенения) в документ PDF и вместо этого обрабатывает все цвета, как если бы они были полностью непрозрачными. Кроме того, Quartz игнорирует глобальную альфа в контексте, когда записывает градиенты (или штриховки) в документ PDF. Одним из возможных обходных путей является захват штриховки в виде битов с использованием растрового контекста и использование полученных битов для создания CGImage, который вы рисуете в области отсечения. Это создает предварительно отрисованные градиенты (или штриховки), но захватывает альфа-контент в PDF-документ. Вы не должны выполнять эту предварительную визуализацию для градиентов (или штриховок), которые не содержат альфа.