Как применить текстовую тень к UITextView? - PullRequest
44 голосов
/ 17 мая 2010

На самом деле я люблю UILabel. Они сладкие. Теперь мне нужно было перейти к UITextView, потому что UILabel не выравнивает текст по вертикали. Черт. Одна вещь, которая мне действительно нужна, это тень текста. UILabel есть. UITextView, кажется, его нет. Но я думаю, что этот парень просто использует те же базовые UIKit NSString дополнения ?? Может быть, у кого-то уже есть решение этой проблемы? Что бы я переписал?

Ответы [ 7 ]

153 голосов
/ 09 мая 2011
text.layer.shadowColor = [[UIColor whiteColor] CGColor];
text.layer.shadowOffset = CGSizeMake(1.0f, 1.0f);
text.layer.shadowOpacity = 1.0f;
text.layer.shadowRadius = 1.0f;

И не забудьте сложить верх:

#import <QuartzCore/QuartzCore.h>
15 голосов
/ 26 февраля 2013

Ответ с

text.layer.shadowColor

добавляет тень ко всему textView, возможно, это работает, но добавляет тень не только к тексту.

Правильный ответ:

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 = 1.0f;
11 голосов
/ 30 ноября 2014

Swift 3


let textView = UITextView(frame: view.frame)
textView.font = UIFont(name: "Helvetica", size: 64.0)
textView.textColor = .red
textView.text = "Hello World"

textView.layer.shadowColor = UIColor.black.cgColor
textView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
textView.layer.shadowOpacity = 1.0
textView.layer.shadowRadius = 2.0
textView.layer.backgroundColor = UIColor.clear.cgColor

Swift 2,3


let textView = UITextView(frame: view.frame)
textView.font = UIFont(name: "Helvetica", size: 64.0)
textView.textColor = UIColor.redColor()
textView.text = "Hello World"    

textView.layer.shadowColor = UIColor.blackColor().CGColor
textView.layer.shadowOffset = CGSize(width: 2.0, height: 2.0)
textView.layer.shadowOpacity = 1.0
textView.layer.shadowRadius = 2.0
textView.layer.backgroundColor = UIColor.clearColor().CGColor
9 голосов
/ 24 сентября 2016

enter image description here

Этот Swift пример использует метод приписанной строки для добавления тени к тексту. См. этот ответ , чтобы узнать больше об атрибутных строках в Swift. Этот метод (в отличие от использования метода слоя ) дает вам возможность задать тень на диапазоне текста, если хотите.

// Create a string
let myString = "Shadow"

// Create a shadow
let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray

// Create an attribute from the shadow
let myAttribute = [ NSAttributedStringKey.shadow: myShadow ]

// Add the attribute to the string
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)

// set the attributed text on a label
myLabel.attributedText = myAttrString // can also use with UITextView

Обновлено для Swift 4

8 голосов
/ 24 июня 2014

В iOS 6+ используйте атрибутивный текст

NSShadow * shadow = [[NSShadow alloc] init];
shadow.shadowColor = [UIColor blackColor];
shadow.shadowOffset = CGSizeMake(2, 2);

NSDictionary * textAttributes =
@{ NSForegroundColorAttributeName : [UIColor blueColor],
   NSShadowAttributeName          : shadow,
   NSFontAttributeName            : [UIFont boldSystemFontOfSize:20] };

textView.attributedText = [[NSAttributedString alloc] initWithString:@"Hello" 
                                                          attributes:textAttributes];

Hello example

0 голосов
/ 25 апреля 2019

swift 4, swift 4.2, swift 5 и выше Простое и элегантное решение, можно легко использовать из конструктора интерфейсов

extension UIView {
    /* The color of the shadow. Defaults to opaque black. Colors created
     * from patterns are currently NOT supported. Animatable. */
    @IBInspectable var shadowColor: UIColor? {
        set {
            layer.shadowColor = newValue!.cgColor
        }
        get {
            if let color = layer.shadowColor {
                return UIColor(cgColor: color)
            }
            else {
                return nil
            }
        }
    }

    /* The opacity of the shadow. Defaults to 0.4 Specifying a value outside the
     * [0,1] range will give undefined results. Animatable. */
    @IBInspectable var shadowOpacity: Float {
        set {
            layer.shadowOpacity = newValue
        }
        get {
            return layer.shadowOpacity
        }
    }

    /* The shadow offset. Defaults to (1, 2). Animatable. */
    @IBInspectable var shadowOffset: CGPoint {
        set {
            layer.shadowOffset = CGSize(width: newValue.x, height: newValue.y)
        }
        get {
            return CGPoint(x: layer.shadowOffset.width, y:layer.shadowOffset.height)
        }
    }

    /* The blur radius used to create the shadow. Defaults to 3. Animatable. */
    @IBInspectable var shadowRadius: CGFloat {
        set {
            layer.shadowRadius = newValue
        }
        get {
            return layer.shadowRadius
        }
    }
}
0 голосов
/ 02 сентября 2013

Это зависит от версии iOS, которую вы используете. Начиная с iOS 6, поддерживается только одна тень, вы задаете ее в качестве атрибута для строки NSAttributedString, которую затем задаете на метке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...