Можно ли добавить тень к тексту в UITextField
?Drop Shadow on UITextField text
ответ
По состоянию на 3.2, вы можете использовать теневые свойства CALayer.
_textField.layer.shadowOpacity = 1.0;
_textField.layer.shadowRadius = 0.0;
_textField.layer.shadowColor = [UIColor blackColor].CGColor;
_textField.layer.shadowOffset = CGSizeMake(0.0, -1.0);
Я не думаю, что вы получаете встроенную поддержку текстовых теней здесь, как вы делаете с UILabel
.
Две идеи:
(1) [Умеренно сложно кода.] Добавить второй UITextField
позади оригинала, на очень небольшое смещение (возможно, с помощью (0.2,0.8)?). Вы можете прослушивать каждое текстовое изменение по ключу, реализуя метод textField:shouldChangeCharactersInRange:replacementString:
в протоколе UITextFieldDelegate
. Используя это, вы можете обновлять нижний текст одновременно. Вы также можете сделать нижний текст (теневой текст) серым и даже слегка расплывчатым, используя тот факт, что прямоугольные текстовые прямоугольники выглядят размытыми. Добавлено: О да, не забудьте установить цвет фона верхнего текстового поля в [UIColor clearColor]
, если вы идете с этой идеей.
(2) [Еще более интересно кода.] Подкласс UITextField
и переопределить метод drawRect:
. Я не делал этого раньше, поэтому я расскажу заранее, что это зависит от того, является ли это назначенным методом рисования, и может оказаться, что вам нужно переопределить другую функцию рисования, такую как drawTextInRect:
, которая специфична для UITextField
. Теперь настройте контекст рисования, чтобы нарисовать тени через the CGContextSetShadow
functions, и позвоните по номеру [super drawRect:rect];
. Надеюсь, что это работает - в случае, если исходный код UITextField
очищает параметры теней для контекста чертежа, эта идея закрыта, и вам придется писать весь код чертежа самостоятельно, что я рекомендую порекомендовать из-за всех дополнительных функций, которые поставляются с UITextFields
как копирование и вставка и ввод кандзи на японском языке.
сладкие спасибо, я буду попробовать первый один – DotSlashSlash
Вы определенно должны использовать нижеприведенный ответ от egarc, гораздо лучший способ решить эту проблему! –
Это правда, @ Mac_Cain13. Эти свойства CALayer были добавлены в iOS 3.2, который не был выпущен, когда я написал свой ответ. – Tyler
У меня есть немного другая проблема - я хочу размытую тень на UILabel. К счастью, решение это оказалось число (2) от Тайлера
Вот мой код:
- (void) drawTextInRect:(CGRect)rect {
CGSize myShadowOffset = CGSizeMake(4, -4);
CGFloat myColorValues[] = {0, 0, 0, .8};
CGContextRef myContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(myContext);
CGColorSpaceRef myColorSpace = CGColorSpaceCreateDeviceRGB();
CGColorRef myColor = CGColorCreate(myColorSpace, myColorValues);
CGContextSetShadowWithColor (myContext, myShadowOffset, 5, myColor);
[super drawTextInRect:rect];
CGColorRelease(myColor);
CGColorSpaceRelease(myColorSpace);
CGContextRestoreGState(myContext);
}
Это в классе, который простирается от UILabel и тащит текст с тенью вниз и правая 4px, тень серая с непрозрачностью 80% и наглядно размыта.
Я думаю, что решение № 2 Тайлера немного лучше для производительности, чем номер 1 Тайлера - вы имеете дело только с одним UILabel в представлении и, предполагая, что вы не перерисовываете каждый фрейм, это не хит в рендеринг по нормальному UILabel.
PS Этот код почерпнул из Quartz 2D documentation
Спасибо за код! Вы можете удалить строку CGContextSetShadow, так как вы вызываете CGContextSetShadowWithColor. Согласно CGContext.h CGContextSetShadow является «эквивалентным вызову CGContextSetShadowWithColor (контекст, смещение, размытие, цвет), где цвет черный с 1/3 альфы» – johnboiles
Спасибо - я удалил эту строку - типичную вырезать-вставить-из- пример ошибки :) – deanWombourne
Ссылка на «Quartz 2D documentation» сломана, новая ссылка: http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_shadows/dq_shadows.html – Vamos
Хотя метод нанесения теней непосредственно на UITextView
будет работать, это неправильный способ сделать это. Добавив тень напрямую с четким цветом фона, все подпункты получат тень, даже курсор.
Подход, который следует использовать, - NSAttributedString
.
NSMutableAttributedString* attString = [[NSMutableAttributedString alloc] initWithString:textView.text];
NSRange range = NSMakeRange(0, [attString length]);
[attString addAttribute:NSFontAttributeName value:textView.font range:range];
[attString addAttribute:NSForegroundColorAttributeName value:textView.textColor range:range];
NSShadow* shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor whiteColor];
shadow.shadowOffset = CGSizeMake(0.0f, 1.0f);
[attString addAttribute:NSShadowAttributeName value:shadow range:range];
textView.attributedText = attString;
Однако textView.attributedText предназначен для iOS6.Если вы должны поддерживать более низкие версии, вы можете использовать следующий подход. (Не забудьте добавить #import <QuartzCore/QuartzCore.h>
)
CALayer *textLayer = (CALayer *)[textView.layer.sublayers objectAtIndex:0];
textLayer.shadowColor = [UIColor whiteColor].CGColor;
textLayer.shadowOffset = CGSizeMake(0.0f, 1.0f);
textLayer.shadowOpacity = 1.0f;
textLayer.shadowRadius = 0.0f;
- 1. GIMP Script-Fu Drop Shadow on Text?
- 2. Android Drop Shadow on View
- 3. Drop Shadow On Borderless WinForm
- 4. CSS Drop Shadow on Body
- 5. Drop Shadow/Duplicate Text на JButton
- 6. Cross text text-shadow
- 7. IE8 Anchor Text Shadow on Hover
- 8. Drop Shadow in Raphael
- 9. WPF Drop Shadow Trigger
- 10. SVG Drop Shadow Spread
- 11. Wpf - Drop shadow исчезает
- 12. Drop Shadow in DrawRect
- 13. Lingering WPF Drop Shadow
- 14. Эффект перекрытия Drop Shadow
- 15. Make Image Drop Shadow
- 16. WPF drop shadow
- 17. Как создать UINavigationBar drop shadow
- 18. Эффект Drop Shadow не работает
- 19. UIActionsSheet text shadow problem
- 20. CSS3 text-shadow IE
- 21. CSS: Text-Shadow багги?
- 22. Text-Shadow IE-9
- 23. css text-shadow
- 24. IE text shadow hack
- 25. CSS Text-Shadow color
- 26. Text Shadow с Python
- 27. CSS text-shadow opcity
- 28. drop shadow CSS с градиентом
- 29. NSView Drop Shadow Использование setShadow:
- 30. Desaturate and add drop shadow
Отлично работает. На iPad вы должны изменить смещение на CGSizeMake (0.0, 1.0) и цвет на белый. – Thomas
Работал отлично для меня тоже! – Taum
Это прекрасное решение. – Dimitris