阴影上的UITextField文本(Drop Shadow on UITextField text)

2019-06-18 11:05发布

是否有可能将阴影添加到一个文本UITextField

Answer 1:

至于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);


Answer 2:

我有一个稍微不同的问题 - 我想在一个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这段代码从大量举债石英2D文档



Answer 3:

我不认为你获得内置支持文本阴影在这里,你的方式做UILabel

两个想法:

(1)[适度棘手的代码。]添加第二个UITextField原来的后面,在一个非常小的偏移(也许通过(0.2,0.8)?)。 你可以听每个文本通过实施改键逐键textField:shouldChangeCharactersInRange:replacementString:方法在UITextFieldDelegate协议。 利用这一点,你可以同时更新较低的文本。 你也可以将下面的文本(阴影文本)灰色,甚至略微模糊使用分数偏移文本rects出现模糊的事实。 补充:哦,是啊,不要忘了顶部的文本字段的背景色设置为[UIColor clearColor]如果你有这样的想法去。

[甚至更有趣的代码(2)子类UITextField并重写drawRect:方法。 我没有做过,所以我会提到前面,这取决于这是指定的绘制方法,它可能会变成你要覆盖另一个绘图功能,如drawTextInRect:这是专门针对UITextField 。 现在设置了绘图上下文通过绘制阴影的CGContextSetShadow功能 ,并调用[super drawRect:rect]; 。 希望这工作-以防原始UITextField代码清除绘图上下文的阴影参数,这个想法被大清洗,你就会有写全绘图代码自己,这是我的反建议,因为所有附带额外的UITextFields比如复制和粘贴和汉字输入日语。



Answer 4:

虽然直接应用阴影的方法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;


文章来源: Drop Shadow on UITextField text