8

我正在尝试对 UILabel 进行子类化(因为这可能是最简单的方法),因此它的文本颜色对其覆盖的背景图像部分是负的。我也有一个大概的想法,但无法将其转换为代码。

图1

传递子类的参数

  • 背景图片
  • UILabel 在背景图像中的位置(可能是 CGRect,因为它需要知道 UILabel 将覆盖的背景图像的 x、y、w、h) - 这也可能只是 UILabel 的矩形,因为 UILabel 将是子视图包含背景图像的 UIImageView 。

绘制标签时的逻辑

  1. 使用文本创建一个蒙版 - 蒙版的内容只是文本本身,而不是背景。
  2. 裁剪被标签覆盖的背景图像的特定部分(矩形)。
  3. 删除(或使透明)文本蒙版之外的所有图像 - > 这样您将只留下文本所在的图像,其余的将消失。
  4. 反转图像的颜色(可能使用这种方法)或kCGBlendModeDifference以某种方式使用?
  5. 在 UILabel 的方法之一drawRectdrawTextInRect方法中绘制所有这些。

用法

这个的用法可能是这样的

  1. 分配一个UIImage
  2. 将其显示在UIImageView
  3. 使用与将要放置UILabel的图像部分相关的反转文本颜色创建子类UILabel
  4. 添加UILabel作为子视图UIImageView

这可能存在的问题

我无法估计滚动时的速度有多快,但是这可以通过将文本直接绘制到 中来解决UIImage,因为它将是静态的。如果将UIImageView持有标签放入 aUIScrollView中,是否会在每个卷轴上重新绘制?

非常感谢您!

4

1 回答 1

0

查看我的问题的答案:drawRect 绘制“透明”文本?

有很多答案,包括您可以从 Robin Senior 使用的一个很棒的开源项目。

享受!

于 2013-09-24T03:59:47.537 回答