【问题标题】:Gradient text in a UITextFieldUITextField 中的渐变文本
【发布时间】:2013-09-01 22:57:58
【问题描述】:

我正在使用 CAGradientLayer 为文本字段制作渐变背景。看起来像这样

我想在文本上使用渐变而不是背景。如何在 UITextField 中制作渐变文本?

我用来在图像中制作渐变的代码

pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = [[myTextField layer] bounds];
gradient.cornerRadius = 7;
gradient.colors = [NSArray arrayWithObjects:
                      (id)pinkDarkOp.CGColor,
                      (id)pinkLightOp.CGColor,
                      nil];
[[myTextField layer]addSublayer:gradient]; 

【问题讨论】:

  • 通常在堆栈溢出我没有答案我不知道为什么?
  • 您没有得到任何答案的一个可能原因是这个问题很难理解。我试图让它更清楚。从最初的问题中,我假设您想要制作渐变文本(而不是该图像中的黑色)。
  • 不,我想将渐变粉色应用到我的文本字段,但渐变覆盖所有框架,不仅是文本
  • 但是渐变当前不是覆盖了整个帧吗? (即使在多次阅读您的问题后我也不明白您在问什么)
  • 只是我只想要文本而不是文本字段的整个框架的渐变色

标签: ios uitextfield cagradientlayer


【解决方案1】:

您可以通过创建两个层来解决此问题: 首先,您创建一个填充渐变的图层。 然后创建另一个包含文本的图层。 最后,您使用第二层作为遮盖第一层的遮罩。这是通过将第二层分配给第一层的遮罩属性来实现的。

如果我更具体地查看您的代码示例,我认为最后一行之前的所有内容都应该没问题。但是你应该用这样的东西替换最后一行:

gradient.mask = myTextField.layer;

也许您还需要对myTextField 进行一些调整(很难说,因为它的定义不在列出的代码中)。重要的是要了解蒙版中的文本必须是不透明的,但该图层的其余部分必须是完全透明的。阅读 CALayer 类参考中的“掩码”属性: https://developer.apple.com/library/ios/DOCUMENTATION/GraphicsImaging/Reference/CALayer_class/Introduction/Introduction.html#//apple_ref/occ/instp/CALayer/mask

免责声明:我没有时间测试代码。我把它留给你。不过用一层遮罩的大体思路应该是可以用的,所以我相信大家可以自己梳理细节。

【讨论】:

  • 想你我现在就测试这个解决方案
  • 我为文本 CALayer *textLayer2 = (CALayer *)[myTextField.layer.sublayers objectAtIndex:0] 添加了一个新的 calayer;我将它添加为渐变层的蒙版 gradient.mask=textLayer2;但没有结果
  • UITextField 在尝试通过调整图层来修改视觉外观时并不是最容易使用的类。我鼓励你开始尝试一个更简单的类,例如一个 UILabel,直到你知道你完全理解掩蔽是如何工作的。当您使用该类正确屏蔽时,您可以再次切换回 UITextField 并从那里继续。
【解决方案2】:

我对我的代码进行了一些更改

pinkDarkOp = [UIColor colorWithRed:0.9f green:0.53f blue:0.69f alpha:1.0];
           pinkLightOp = [UIColor colorWithRed:0.79f green:0.45f blue:0.57f alpha:1.0];
        gradient.frame = [[myTextField layer] bounds];
        gradient.cornerRadius = 7;
       gradient.colors = [NSArray arrayWithObjects:(id)pinkDarkOp.CGColor,
                                             (id)[[UIColor clearColor] CGColor], nil]; 
           gradient.mask=myTextField.layer;

文本现在不可见

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    • 2021-01-19
    相关资源
    最近更新 更多