для iPhone UILabel ни текста, мягкой тенью
Я знаю, что мягкие тени не поддерживаются UILabel из коробки, на iPhone. Итак, что было бы лучшим способом реализовать мой собственный?
EDIT:
очевидно, я буду подкласс UILabel и рисовать в -drawRect:
Мой вопрос в том, как я могу получить содержимое метки в виде графики и рисовать вокруг них, размывать их и т. д...
EDIT 2:
Я вернулся к этому вопросу примерно через год. В тем временем я построил класс, который позволяет легко добавлять мягкую тень к метке и настраивать ее радиус и т. д., а также рисовать градиенты на самом тексте. Вы можете найти его на GitHub: https://github.com/doukasd/iOS-Components/tree/master/Views
14 ответов:
ответ до этот же вопрос предоставляет код для рисования размытой тени за UILabel. Автор использует CGContextSetShadow () для создания тени для нарисованного текста.
начиная с версии 3.2 в SDK имеется прямая поддержка теней.
label.layer.shadowColor = [label.textColor CGColor]; label.layer.shadowOffset = CGSizeMake(0.0, 0.0);импорт
<QuartzCore/QuartzCore.h>и играть с некоторыми параметрами:label.layer.shadowRadius = 3.0; label.layer.shadowOpacity = 0.5;и, если вы обнаружите, что ваша тень обрезана границами метки:
label.layer.masksToBounds = NO;наконец-то
label.layer.shouldRasterize = YES
Я советую вам использовать свойства shadowColor и shadowOffset UILabel:
UILabel* label = [[UILabel alloc] init]; label.shadowColor = [UIColor whiteColor]; label.shadowOffset = CGSizeMake(0,1);
В дополнение к ответу IIDan: Для некоторых целей необходимо установить
label.layer.shouldRasterize = YESЯ думаю, что это связано с режимом наложения, который используется для визуализации тени. Например, у меня был темный фон и белый текст на нем, и я хотел "выделить" текст с помощью черного теневого свечения. Он не работал, пока я не установил это свойство.
применить (мягкую) тень на вид пласт, например:
UILabel *label = [[UIabel alloc] init]; label.layer.shadowColor = [[UIColor whiteColor] CGColor]; label.layer.shadowOpacity = 1.0;
чтобы держать вещи в курсе: создание тени в Swift так же просто, как это:
импорт структуры QuartzCore
import QuartzCoreи установите атрибуты тени для вашей метки
titleLabel.shadowColor = UIColor.blackColor() titleLabel.shadowOffset = CGSizeMake(0.0, 0.0) titleLabel.layer.shadowRadius = 5.0 titleLabel.layer.shadowOpacity = 0.8 titleLabel.layer.masksToBounds = false titleLabel.layer.shouldRasterize = true
Я попробовал почти все эти методы (кроме FXLabel) и не смог заставить ни один из них работать с iOS 7. В конце концов я нашел THLabel, который отлично работает для меня. Я использовал THLabel в Построителе интерфейс и настройки определенные пользователем атрибуты во время выполнения, так что это легко для не программиста, чтобы контролировать выглядеть и чувствовать себя.
Это как трюк,
UILabel *customLabel = [[UILabel alloc] init]; UIColor *color = [UIColor blueColor]; customLabel.layer.shadowColor = [color CGColor]; customLabel.layer.shadowRadius = 5.0f; customLabel.layer.shadowOpacity = 1; customLabel.layer.shadowOffset = CGSizeZero; customLabel.layer.masksToBounds = NO;
_nameLabel = [[UILabel alloc] initWithFrame:CGRectZero]; _nameLabel.font = [UIFont boldSystemFontOfSize:19.0f]; _nameLabel.textColor = [UIColor whiteColor]; _nameLabel.backgroundColor = [UIColor clearColor]; _nameLabel.shadowColor = [UIColor colorWithWhite:0 alpha:0.2]; _nameLabel.shadowOffset = CGSizeMake(0, 1);Я думаю, что вы должны использовать [UIColor colorWithWhite:0 alpha:0.2], чтобы установить значение альфа.
Я написал библиотеку, которая предоставляет подкласс UILabel с поддержкой мягкой тени и кучей других эффектов:
подкласс UILabel, как указано, то в drawRect:, do
[self drawTextInRect:rect];чтобы получить текст, нарисованный в текущем контексте. Как только он там, вы можете начать работать с ним, добавив фильтры и еще много чего. Если вы хотите сделать тень с тем, что вы только что нарисовали в контекст, вы должны быть в состоянии использовать:CGContextSetShadowWithColor()посмотрите эту функцию в документах, чтобы узнать, как ее использовать.
начиная с 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];
на
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()
Comments