Вы, вероятно, можете выполнять эту работу с CGLayer.
Лучше всего вы сможете использовать существующий код для рисования символов (или чего-либо еще) в CGLayer.
Вот примерный код:
// first, make a CGLayer...
CGLayerRef yourDrawingPad =
CGLayerCreateWithContext(UIGraphicsGetCurrentContext(),etc..
CGContextRef yourRef = CGLayerGetContext(yourDrawingPad);
// now, draw to yourRef .. draw your various typography (or anything)
// use your current drawing code.
// all done drawing, now make an image mask...
UIGraphicsBeginImageContext(CGLayerGetSize(yourDrawingPad));
CGContextRef temp = UIGraphicsGetCurrentContext();
CGContextDrawLayerAtPoint(temp, CGPointZero, yourDrawingPad);
CGImageRef anAlphaMask = CGBitmapContextCreateImage(temp);
UIGraphicsEndImageContext();
Теперь у вас есть хорошая маска, которую вы можете использовать:
CGContextSaveGState(UIGraphicsGetCurrentContext()) ...
CGContextClipToMask(UIGraphicsGetCurrentContext(), self.frame, anAlphaMask);
Так что просто замаскируйте ее под изображение градиента, или как там работает.
(Возможно: возможно, вам придется создать растровое изображение вне экрана, а затем использовать его в качестве маски?)
Сноска: не забывайте, что весьма вероятно, что вам придется рисоватьСверху вниз!К счастью, с этим просто иметь дело.Там, где написано «сейчас, рисуй на yourRef», перед рисованием сохраните свое состояние и добавьте две строки кода:
CGContextTranslateCTM(refForMask, 0, self.frame.size.height);
CGContextScaleCTM(refForMask, 1.0, -1.0);
Надеюсь, это поможет