Color de text negativo con respecto a la image de background

Estoy tratando de subclass (porque esa es probablemente la forma más fácil de hacerlo) UILabel, por lo que su color de text es negativo para la parte de la image de background que se superpone. También tengo una idea aproximada de cómo hacer eso, pero no puedo transformarlo en código.

Figura 1

Parámetros para pasar la subclass

  • Imagen de background
  • Posición de la UILabel dentro de la image de background (probablemente CGRect, ya que necesita saber las x, y, w, h de la image de background que cubrirá el UILabel). Esto también podría ser solo el rectángulo de UILabel, ya que UILabel será la subvista de un UIImageView que contiene la image de background.

Lógica al dibujar la label

  1. Crea una máscara con el text: el contenido de la máscara solo sería el text en sí, no el background.
  2. Recorte la parte específica (rect) de la image de background que se superpone con la label.
  3. Suprima (o haga transparente) toda la image fuera de la máscara de text -> de esa manera solo quedaría la image donde está el text, el rest desaparecerá.
  4. Invierta los colors de la image (probablemente con este método) o use kCGBlendModeDifference de alguna manera, quizás?
  5. Dibuja todo eso en uno de los methods methods de drawRect o drawTextInRect .

Uso

El uso de esto probablemente sea algo así

  1. Alloc un UIImage
  2. UIImageView en un UIImageView
  3. Cree la subclass UILabel con el color de text invertido en relación con la parte de la image en la que se UILabel el UILabel .
  4. Agregue la UILabel como una subvista del UIImageView

Problemas que esto podría tener

No puedo aproximar lo rápido que será durante el desplazamiento, pero esto podría resolverse dibujando el text directamente en el UIImage , ya que será estático. Si UIImageView con la label se colocara en una UIScrollView , ¿se volvería a dibujar en cada desplazamiento?

Muchas gracias de antemano!

Echa un vistazo a la respuesta a mi pregunta: ¿ dibujo drawRect 'transparente'?

Hay una serie de respuestas que incluyen un gran proyecto de código abierto que puede usar de Robin Senior.

¡Disfrutar!