CAGradientLayer и scrollViewTexturedBackgroundColor - PullRequest
1 голос
/ 12 февраля 2011

Я пытаюсь использовать CAGradientLayer для затухания элементов управления переднего плана на фоне текстурированного вида.Итак, в двух словах, у меня есть представление с цветом bg как scrollViewTexturedBackgroundColor.Кроме того, у меня есть вид, содержимое которого я хотел бы закрасить на границе в цвет фона.

CAGradientLayer* gradient = [CAGradientLayer layer];
gradient.frame = self->scrollableCanvas.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor scrollViewTexturedBackgroundColor] CGColor], (id)[[UIColor scrollViewTexturedBackgroundColor] CGColor], nil];
[gradient setStartPoint:CGPointMake(0.90, 1)];
[gradient setEndPoint:CGPointMake(1, 1)];    
[[self->scrollableCanvas layer] addSublayer:gradient];
[[self->scrollableCanvas layer] setMasksToBounds:YES];

К сожалению, CAGradientLayer, похоже, не поддерживает UIColors в качестве шаблонных изображений.

есть какие-нибудь идеи, как мне добиться простого эффекта затенения границ для подпредставления?

спасибо

Ответы [ 2 ]

3 голосов
/ 12 февраля 2011

Вы можете использовать маленький трюк:

//create normal UIImageView
UIImageView* iv = [[[UIImageView alloc] initWithImage: [UIImage imageNamed :@"bg_png.png"]] autorelease];
[superview addSubview: iv];

//draw gradient on top
UIView *view = [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)] autorelease];
CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = view.bounds;
gradient.colors = [NSArray arrayWithObjects:(id)[[UIColor colorWithWhite: 1.0 alpha: 0.0] CGColor], (id)[[UIColor colorWithWhite: 1.0 alpha: 1.0] CGColor], nil];
[view.layer insertSublayer:gradient atIndex:0];
[superview addSubview: view];
0 голосов
/ 21 января 2013

Я создал категорию на UILabel, которая добавляет градиент в конце метки, используя ответ Макса.

Если вам нужно, вот оно:

#import "UILabel+GradientEnding.h"

@implementation UILabel (GradientEnding)

- (void)addGradientEnding
{
    //draw gradient on top
    UIView *gradientAlphaView = [[UIView alloc] initWithFrame:CGRectMake(self.frame.size.width - 80.0, 0, 80.0, self.frame.size.height)];
    UIColor *startColor = RGBA(0xf7f7f7, 0);
    UIColor *endColor = RGBA(0xf7f7f7, 1);
    CAGradientLayer *gradient = [CAGradientLayer layer];
    gradient.frame = gradientAlphaView.bounds;
    gradient.colors = [NSArray arrayWithObjects:(id)[startColor CGColor], (id)[endColor CGColor], nil];
    gradient.startPoint = CGPointMake(0, 0.5);
    gradient.endPoint = CGPointMake(1.0, 0.5);
    [gradientAlphaView.layer insertSublayer:gradient atIndex:0];
    [self addSubview:gradientAlphaView];
}

@end

Но вы должны использовать собственные цвета.И используйте это определение:

#define RGBA(rgbValue, opacity) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:opacity]
...