Gradienty na UIView i UILabels na iPhone [duplikat]
Możliwy duplikat:
ręczne rysowanie gradientu w aplikacjach na iPhone ' a?
Moja aplikacja musi wyświetlać tekst w UIView
LUB UILabel
, ale podłoże musi być gradientem w przeciwieństwie do prawdziwego UIColor
. Używanie programu graficznego do tworzenia pożądanego wyglądu nie jest dobre, ponieważ tekst może się różnić w zależności od danych zwracanych z serwera.
7 answers
Możesz również użyć graficznego obrazu o szerokości jednego piksela jako gradientu i ustawić właściwość view, Aby rozszerzyć grafikę w celu wypełnienia widoku(zakładając, że myślisz o prostym gradiencie liniowym, a nie jakiejś radialnej grafice).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-08 00:59:40
Zdaję sobie sprawę, że jest to starszy wątek, ale na przyszłość:
[[2]}począwszy od iPhone SDK 3.0, niestandardowe gradienty mogą być zaimplementowane bardzo łatwo, bez podklasowania lub obrazów, za pomocą nowegoCAGradientLayer
:
UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 100)] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
Spójrz na dokumenty CAGradientLayer. Opcjonalnie można określić punkty początkowe i końcowe (w przypadku, gdy nie chcesz liniowego gradientu przechodzącego od góry do dołu), a nawet określone lokalizacje, które odwzorowują każdy z kolorów.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-14 23:06:16
Możesz użyć Grafiki rdzeniowej do narysowania gradientu, jak wskazano w odpowiedzi Mike ' a. Jako bardziej szczegółowy przykład, możesz utworzyć podklasę UIView
, która będzie używana jako tło dla twojego UILabel
. W podklasie UIView
należy zastąpić metodę drawRect:
i wstawić kod podobny do następującego:
- (void)drawRect:(CGRect)rect
{
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGGradientRef glossGradient;
CGColorSpaceRef rgbColorspace;
size_t num_locations = 2;
CGFloat locations[2] = { 0.0, 1.0 };
CGFloat components[8] = { 1.0, 1.0, 1.0, 0.35, // Start color
1.0, 1.0, 1.0, 0.06 }; // End color
rgbColorspace = CGColorSpaceCreateDeviceRGB();
glossGradient = 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(currentContext, glossGradient, topCenter, midCenter, 0);
CGGradientRelease(glossGradient);
CGColorSpaceRelease(rgbColorspace);
}
Ten szczególny przykład tworzy biały, błyszczący gradient, który jest rysowany od góry UIView
do jego pionowego środka. Możesz ustawić UIView
' s backgroundColor
na co chcesz i ten połysk zostanie narysowany na wierzchu tego koloru. Można również narysować gradient promieniowy za pomocą funkcji CGContextDrawRadialGradient
.
Musisz tylko odpowiednio Rozmiar UIView
i dodać UILabel
jako podgląd tego, aby uzyskać pożądany efekt.
EDIT (4/23/2009): zgodnie z sugestią St3fana, zastąpiłem ramkę widoku jego granicami w kodzie. Jest to poprawne w przypadku, gdy pochodzenie widoku nie jest (0,0).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 00:43:54
Przy użyciu CAGradientLayer
, w przeciwieństwie do CGGradient
, gradient nie jest gładki, ale ma zauważalne Stopniowanie do niego. Zobacz :
Aby uzyskać bardziej atrakcyjne wyniki, lepiej użyć CGGradient
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-19 00:45:03
ODPOWIEDŹ Mirko Froehlicha zadziałała dla mnie, z wyjątkiem sytuacji, gdy chciałem użyć niestandardowych kolorów. Sztuczka polega na określeniu koloru interfejsu użytkownika z odcieniem, nasyceniem i jasnością zamiast RGB.
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = myView.bounds;
UIColor *startColour = [UIColor colorWithHue:.580555 saturation:0.31 brightness:0.90 alpha:1.0];
UIColor *endColour = [UIColor colorWithHue:.58333 saturation:0.50 brightness:0.62 alpha:1.0];
gradient.colors = [NSArray arrayWithObjects:(id)[startColour CGColor], (id)[endColour CGColor], nil];
[myView.layer insertSublayer:gradient atIndex:0];
Aby uzyskać odcień, nasycenie i jasność koloru, użyj wbudowanego próbnika kolorów xcode i przejdź do karty HSB. W tym widoku barwa jest mierzona w stopniach, więc podziel wartość przez 360, aby uzyskać wartość, którą chcesz wprowadzić w kodzie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-26 13:02:15
To jest to, co mam pracy-ustawić UIButton w Xcode IB przezroczysty / jasny,i bez obrazu bg.
UIColor *pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
UIColor *pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = [[shareWordButton layer] bounds];
gradient.cornerRadius = 7;
gradient.colors = [NSArray arrayWithObjects:
(id)pinkDarkOp.CGColor,
(id)pinkLightOp.CGColor,
nil];
gradient.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.7],
nil];
[[recordButton layer] insertSublayer:gradient atIndex:0];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 03:54:01
Osiągam to w widoku z subview, który jest UIImageView. Obraz, na który wskazuje ImageView, jest gradientem. Następnie ustawiam kolor tła w widoku UIView i mam kolorowy gradientowy widok. Następnie używam widoku tak, jak muszę i wszystko, co narysuję, będzie pod tym gradientowym widokiem. Dodając drugi widok na górze ImageView, możesz mieć kilka opcji, Czy twój rysunek będzie poniżej lub powyżej gradientu...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-12 06:35:45