Podany przykład zależy od prywatnych funkcji rysowania tekstu, do których nie masz dostępu w telefonie iPhone.
Autor podaje przykład, jak to zrobić przy użyciu publicznego interfejsu API w
subsequent post.
Jego późniejszy przykład wykorzystuje obraz gradientowy dla koloru tekstu. (Niestety, wydaje się, jego blog został już usunięty, ale zobaczyć Bach's answer here dla podejścia użył.)
Jeśli nadal chcesz narysować gradient do koloru tekstu w kodzie, można to zrobić przez instacji UILabel i przesłanianie -drawRect: mieć kod jak poniżej w nim:
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);
Jedną wadą tego podejścia jest to, że funkcje rdzenia graficznego używam nie obsługują Unicode poprawnie.
To, co robi kod, odwraca kontekst rysunku pionowo (iPhone odwraca normalny układ współrzędnych kwarcu włączony dla osi Y), ustawia tryb rysowania tekstu, aby przecinał narysowany tekst ze ścieżką przycinającą, przycina obszar do narysuj tekst, a następnie narysuj gradient. Gradient wypełni tylko tekst, a nie tło.
Próbowałem użyć metody NSString -drawAtPoint: do tego, która obsługuje Unicode, ale wszystkie znaki biegły jeden na drugim, gdy przełączyłem tryb tekstowy na kCGTextClip.
Wygląda na to, że jest to duplikat tego pytania: http://stackoverflow.com/questions/422066/gradients -on-uiview-and-uilabels-on-iphone –
właściwie to pytanie pyta, jak dodać gradient na tle uilabel, bez gradientu do samego tekstu. – DotSlashSlash
Niestety, źle odczytałem twoje pytanie. Poniżej znajdziesz sposób ustawienia gradientu na tekst, a nie tło. –