Смешивание с кварцем 2D - PullRequest
2 голосов
/ 28 июня 2011

TableViewCell

Выше приведен UITableViewCell, содержащий две метки UILabel.Ячейка имеет прозрачный фон с помощью [UIColor clearColor], а фоновый узор ( вам может потребоваться присмотреться, чтобы увидеть его ) устанавливается на UITableView с помощью initWithPatternImage UIColor.

What I 'Я хотел бы иметь возможность смешать текст с фоновым рисунком, чтобы текст имел сквозную текстуру.Единственное, в чем я не уверен - это лучший способ добиться этого.

Я знаю, что могу использовать NSString вместо UILabels и рисовать текст непосредственно в изображение, но затем это можно смешать сфон, даже если он не рисуется в том же drawRect (, т. е. текстовое изображение будет рисоваться в подклассе UITableViewCell, где в качестве фона рисуется экземпляр UITableView )?

Другой способ - создать маску изображения из текста, создать другое изображение с уже текстурированной текстурой ( с верхней половиной белого и нижней половиной темно-серого цвета ), а затем использовать его для рисования текста, как обведено в этом уроке «Какао с любовью» .

Хотя я, очевидно, могу использовать урок для достижения второй реализации, я более склонен исследовать первое, так как в нем не используются внешние изображения и, возможно,быть более эффективным.

Ваши мысли, ссылки и примеры кода будут высоко оценены.

Обратите внимание: Sустановка низкого значения альфа на UILabels не дает желаемого эффекта

1 Ответ

0 голосов
/ 28 июня 2011

Если вы установите метки как непрозрачные и альфа-значение меньше 1,0, это должно работать. Они могут быть установлены в Интерфейсном Разработчике или как код как это:

[theIncidentLabel setOpaque:NO];
[theIncidentLabel setAlpha:0.5];

Вы можете просто установить цвет текста на цвет с альфа-значением меньше 1,0.

[theIncidentLabel setTextColor:[UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.5]];

Используя эти настройки, я вижу текстуру фона через метки в проекте, над которым я работаю. В моем проекте список UITableView также прозрачен, а фоновая текстура получается из изображения, загруженного в UIImageView за UITableView.

Это простое альфа-смешение. В ходе обсуждения в комментариях мы выяснили, что этого недостаточно для ваших нужд. Вместо этого вы можете использовать альфа-маскирование, как описано в упомянутом руководстве.

В качестве альтернативы вы можете отказаться от альфа-масок и просто нарисовать текст в CGImage, а затем нарисовать это изображение на фоновом шаблоне в другом режиме наложения, например, kCGBlendModeScreen. Вот метод drawRect из вышеупомянутого урока, переписанный с помощью этой техники:

- (void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
        // Draw a black background
    [[UIColor blackColor] setFill];
    CGContextFillRect(context, rect);

        // Draw the text upside-down
    CGContextSaveGState(context);
    CGContextTranslateCTM(context, 0, rect.size.height);
    CGContextScaleCTM(context, 1.0, -1.0);
    [[UIColor lightGrayColor] setFill];
    [text drawInRect:rect withFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:40.0]];
        // Draw it again in a darker color.
    [[UIColor darkGrayColor] setFill];
    CGContextTranslateCTM(context, 0, 50.0);
    [text drawInRect:rect withFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:40.0]];
    CGContextRestoreGState(context);

        // Create an text image from what we've drawn so far
    CGImageRef textImage = CGBitmapContextCreateImage(context);

        // Draw a white background (overwriting the previous work)
    [[UIColor whiteColor] setFill];
    CGContextFillRect(context, rect);

        // Draw the background image
    CGContextSaveGState(context);
    [[UIImage imageNamed:@"shuttle.jpg"] drawInRect:rect];
        // Set the blend mode. Try different options to meet your tastes.
    CGContextSetBlendMode(context, kCGBlendModeScreen);
        // Draw the text.
    CGContextDrawImage(context, rect, textImage);
        // Clean up.
    CGContextRestoreGState(context);
    CGImageRelease(textImage);
}
...