2011-02-16 77 views
0

我需要的是有点难以解释。让我们尝试...可可不同的文字颜色在同一个字母

我需要在我的应用程序中编写文本,并且文本会从左向右逐渐更改颜色。 我想我可以说这和你在卡拉OK屏幕上看到的效果类似。

例如,我用蓝色绘制文本行,然后逐渐使用计时器,从左至右的颜色变为红色。但我不希望它逐字逐句地改变,而是逐渐改变。这需要在某个时刻,同一封信可以有一部分用红色表示,一部分用蓝色表示。

我一直在阅读关于核心绘图,也许这是解决方案,但我真的不知道如何开始。我正在考虑使用背景图层,并在它的顶部绘制一个透明的文字(只有边框),但我不知道如何去做。

任何想法,将不胜感激。

回答

3

你或许可以用CGLayer来完成这项工作。

最重要的是,您应该能够使用您现有的代码将字符(或其他任何东西)绘制到CGLayer中。

下面是一些粗糙的代码:

// first, make a CGLayer... 

CGLayerRef yourDrawingPad = 
    CGLayerCreateWithContext(UIGraphicsGetCurrentContext(),etc.. 
CGContextRef yourRef = CGLayerGetContext(yourDrawingPad); 

// now, draw to yourRef .. draw your various typography (or anything) 
// use your current drawing code. 

// all done drawing, now make an image mask... 

UIGraphicsBeginImageContext(CGLayerGetSize(yourDrawingPad)); 
    CGContextRef temp = UIGraphicsGetCurrentContext(); 
    CGContextDrawLayerAtPoint(temp, CGPointZero, yourDrawingPad); 
    CGImageRef anAlphaMask = CGBitmapContextCreateImage(temp); 
UIGraphicsEndImageContext(); 

你现在有一个很好的面膜,你可以使用:

CGContextSaveGState(UIGraphicsGetCurrentContext()) ... 
CGContextClipToMask(UIGraphicsGetCurrentContext(), self.frame, anAlphaMask); 

所以只是掩盖它在一个梯度的图像,或任何作品。

(可以想象:也许你将不得不建立一个位图图像屏幕外,然后用其作为面罩)

脚注:不要忘了,很可能你将不得不倒挂画了!幸运的是,这很容易处理。它说:“现在,提请yourRef”绘图保存你的状态之前,并添加两行代码:

CGContextTranslateCTM(refForMask, 0, self.frame.size.height); 
CGContextScaleCTM(refForMask, 1.0, -1.0); 

希望它可以帮助

+0

很奇怪。我发布了一条评论,但缺失。也许我没有正确添加它。所以这里再次。我会尝试两种方法。谢谢您的帮助。 – Ernesto 2011-02-20 15:02:16

2

我对如何做到这一点有一个想法,但它有点复杂。你可以创建一个NSBezierPath并为每个字符添加字形。然后,将其设置为剪辑并绘制NSGradient。然后你只需要改变NSGradient中颜色的偏移来移动颜色。

+0

我会尝试。谢谢。 – Ernesto 2011-02-20 15:03:07

相关问题