ios uitextview textkit nslayoutmanager

ios - UIImage animado en UITextView con TextKit



nslayoutmanager (1)

Creo que este comportamiento se debe a que UITextView no muestra los archivos adjuntos utilizando UIImageView UIImageView. Cuando observo la jerarquía de vistas con y sin el NSTextAttachment s agregado a la UITextView , no veo ninguna nueva vista (puede observar la jerarquía de vistas usando Ver depuración en Xcode o diciendo [[[UIApplication sharedApplication] keyWindow] recursiveDescription] ). Presumiblemente, el UITextView simplemente dibuja sus archivos adjuntos directamente.

Dicho esto, una forma en la que puedo pensar en incluir un archivo adjunto animable es crear una UIImageView animada como una subvista del UITextView , colocarlo exactamente donde el NSLayoutManager coloca el NSTextAttachment y desplazarlo cada vez que el UITextView se desplaza. Puede obtener el rectángulo de NSTextAttachment desde NSLayoutManager llamando a boundingRectForGlyphRange:inTextContainer: (posiblemente en layoutManager:didCompleteLayoutForTextContainer:atEnd: .

Tengo un UIImage que contiene varios marcos de imagen y una duración que se cortó a partir de un archivo GIF animado. Si cargo la imagen en un UIWebView , se animará como se espera, pero quiero usar un UITextView en UITextView lugar. La opción obvia es usar TextKit con un NSLayoutManger personalizado y muchos atributos NSAttributedString personalizados para lograr varios efectos de dibujo. Tengo un solo UITextView que me gustaría dar a un NSAttributedString que contiene NSTextAttachment s para todas las imágenes que necesito para mostrar en línea. Funciona bien, excepto cuando carga uno de estos UIImages animados, no se animan a través de sus cuadros. ¿Alguna idea sobre cómo lograr esto? Se me ha ocurrido una opción teórica:

  1. Para cada imagen animada agregue un atributo personalizado definido
  2. Cuando el administrador de diseño va a dibujar fondos, repita este atributo para ubicar las posiciones del adjunto.
  3. Devuelva la llamada a la vista de texto para crear UIImageView s con la imagen animada, agregue como una subvista y llame a startAnimating

Todavía tengo que intentar esto, pero es bastante hacky. Me pregunto si hay una mejor opción.

En resumen: quiero animar un UIImage dentro de un UITextView través de NSTextAttachment dentro de un NSAttributedString sin la necesidad de objetos adicionales de UIImageView . Puede ignorar el hecho de que esto se hizo anteriormente con un UIWebView . UIImage tiene propiedades ( images , duration ) para configurar marcos animados, que actualmente tengo configurados. Si lo asigno a un UIImageView se anima, si lo configuro como un NSTextAttachment , no hay animación.

Le agradecería cualquier comentario. ¡Gracias!