В примере, который вы предоставляете, используются частные функции рисования текста, на которые у вас нет доступа на iPhone.
Автор дает пример того, как это сделать, используя открытый API в
subsequent post.
В его более позднем примере используется градиентное изображение для цвета текста. (К сожалению, похоже, его блог с тех пор был удален, но см. за подход, который он использовал.)
Если вы все еще хотите нарисовать градиент для цвета текста в коде, это может быть сделано путем подкласса UILabel и переопределения -drawRect: иметь код вроде следующего в нем:
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0f, self.bounds.size.height);
CGContextScaleCTM(context, 1.0f, -1.0f);
CGContextSelectFont(context, "Helvetica", 20.0f, kCGEncodingMacRoman);
CGContextSetTextDrawingMode(context, kCGTextClip);
CGContextSetTextPosition(context, 0.0f, round(20.0f/4.0f));
CGContextShowText(context, [self.text UTF8String], strlen([self.text UTF8String]));
CGContextClip(context);
CGGradientRef gradient;
CGColorSpaceRef rgbColorspace;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 1.0, // Start color
1.0, 1.0, 1.0, 0.1 }; // End color
rgbColorspace = CGColorSpaceCreateDeviceRGB();
gradient = CGGradientCreateWithColorComponents(rgbColorspace, components, locations, num_locations);
CGRect currentBounds = self.bounds;
CGPoint topCenter = CGPointMake(CGRectGetMidX(currentBounds), 0.0f);
CGPoint midCenter = CGPointMake(CGRectGetMidX(currentBounds), CGRectGetMidY(currentBounds));
CGContextDrawLinearGradient(context, gradient, topCenter, midCenter, 0);
CGGradientRelease(gradient);
CGColorSpaceRelease(rgbColorspace);
CGContextRestoreGState(context);
Одним из недостатков этого подхода состоит в том, что функции Core Graphics, которые я использую не обрабатывать текст Unicode правильно.
Что делает код, он переворачивает контекст чертежа вертикально (iPhone инвертирует нормальную систему координат кварца для оси Y), устанавливает режим текстового рисования, чтобы пересечь нарисованный текст с обтравочным контуром, закрепил область рисуем текст, а затем рисуем градиент. Градиент будет заполнять только текст, а не фон.
Я пробовал использовать метод NDString -drawAtPoint: для этого, который поддерживает Unicode, но все символы запускались друг над другом, когда я переключил текстовый режим на kCGTextClip.
Это похоже на дубликат этого вопроса: http://stackoverflow.com/questions/422066/gradients -on-uiview-and-uilabels-on-iphone –
На самом деле этот вопрос спрашивает, как добавить градиент на фоне uilabel без градиента к самому тексту – DotSlashSlash
Извините, я неправильно задал ваш вопрос. Ниже приведен способ настройки градиента текста, а не фона. –