我需要的是有点难以解释。我们试试......
我需要在我的应用中编写一个文本,该文本将逐渐从左到右改变颜色。 我想我可以说它与你在卡拉OK屏幕上看到的效果相似。
例如。我画了一条蓝色的文字线,然后逐渐地,使用计时器,从左到右的颜色变为红色。但我不希望它逐字逐句改变。这需要在某个时刻,同一个字母的部分可以是红色而部分是蓝色。
我一直在阅读核心绘图,也许这是解决方案,但我真的不知道如何开始。我正在考虑使用背景图层,并在其顶部绘制透明文本(仅限边框),但我不太确定如何操作。
任何想法将不胜感激。
答案 0 :(得分: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);
希望有所帮助
答案 1 :(得分:2)
我知道如何做到这一点,但它有点复杂。您可以创建NSBezierPath并为每个字符添加字形。然后,将其设置为剪辑并绘制NSGradient。然后你只需要改变NSGradient中颜色的偏移量来移动颜色。