iPhone UILabel текст мягкая тень - PullRequest
58 голосов
/ 10 ноября 2009

Я знаю, что мягкие тени не поддерживаются UILabel из коробки на iPhone. Итак, что было бы лучшим способом реализовать мой собственный?

EDIT:

Очевидно, я сделаю подкласс UILabel и нарисую в -drawRect: У меня вопрос, как мне получить содержимое ярлыка в виде графики и нарисовать вокруг него, размыть их и т. Д ...

РЕДАКТИРОВАТЬ 2:

Я вернулся к этому вопросу примерно через год. Тем временем я создал класс, который позволяет вам легко добавлять мягкую тень к метке, изменять ее радиус и т. Д., А также рисовать градиенты на самом тексте. Вы можете найти его на GitHub: https://github.com/doukasd/iOS-Components/tree/master/Views

Ответы [ 14 ]

3 голосов
/ 10 ноября 2009

Подкласс UILabel, как указано, затем в drawRect :, выполните [self drawTextInRect:rect];, чтобы получить текст, отображаемый в текущем контексте. Как только он появится, вы можете начать работать с ним, добавив фильтры и еще много чего. Если вы хотите создать тень от того, что вы только что нарисовали в контексте, вы можете использовать:

CGContextSetShadowWithColor()

Посмотрите эту функцию в документации, чтобы узнать, как ее использовать.

1 голос
/ 05 января 2017

В Swift 3 вы можете создать расширение:

import UIKit

extension UILabel {
    func shadow() {
        self.layer.shadowColor = self.textColor.cgColor
        self.layer.shadowOffset = CGSize.zero
        self.layer.shadowRadius = 3.0
        self.layer.shadowOpacity = 0.5
        self.layer.masksToBounds = false
        self.layer.shouldRasterize = true
    }
}

и используйте его через:

label.shadow()
1 голос
/ 06 октября 2011

Начиная с iOS 5, Apple предоставляет частный метод API для создания ярлыков с мягкими тенями. Ярлыки очень быстрые: я использую одновременно десятки в серии прозрачных представлений, и в анимации прокрутки нет замедления.

Это полезно только для приложений не из App Store (очевидно), и вам нужен заголовочный файл.

$SBBulletinBlurredShadowLabel = NSClassFromString("SBBulletinBlurredShadowLabel");

CGRect frame = CGRectZero;

SBBulletinBlurredShadowLabel *label = [[[$SBBulletinBlurredShadowLabel alloc] initWithFrame:frame] autorelease];
label.backgroundColor = [UIColor clearColor];
label.textColor = [UIColor whiteColor];
label.font = [UIFont boldSystemFontOfSize:12];
label.text = @"I am a label with a soft shadow!";
[label sizeToFit];
0 голосов
/ 10 ноября 2009

Подкласс UILabel и переопределение -drawInRect:

...