2015-04-29 13 views
16

Ho uno UIImage che contiene più fotogrammi immagine e una durata che è stata tagliata insieme da un file GIF animato. Se carico l'immagine in un UIWebView, si animerà come previsto, ma preferirò usare lo UITextView. La scelta più ovvia è utilizzare TextKit con un numero personalizzato NSLayoutManger e molti attributi personalizzati NSAttributedString per ottenere vari effetti di disegno. Ho un singolo UITextView che mi piacerebbe dare un NSAttributedString che contenga NSTextAttachment s per tutte le immagini che ho bisogno di visualizzare in linea. Funziona bene, tranne quando carico uno di questi animati UIImages, non animano attraverso i loro fotogrammi. Qualche idea su come realizzare questo? Mi è venuta in mente un'opzione teorica:UIImmagine animata in UITextView con TextKit

  1. Per ogni immagine animata aggiungere un attributo definito personalizzato
  2. Quando Layout Manager va a disegnare sfondi, iterare questo attributo per individuare le posizioni del fissaggio.
  3. richiamata alla visualizzazione di testo per creare UIImageView s con l'immagine animata, aggiungere come una visualizzazione secondaria, e chiamare startAnimating

devo ancora provare questo, ma è abbastanza hacky. Mi chiedo se c'è un'opzione migliore.

In sintesi: Voglio animare un UIImage all'interno di un UITextView tramite NSTextAttachment all'interno di un NSAttributedString senza la necessità di UIImageView oggetti extra. È possibile ignorare il fatto che ciò è stato fatto in precedenza con uno UIWebView. UIImage ha proprietà (images, duration) per l'impostazione di frame animati, che attualmente ho configurato. Se lo assegno a un UIImageView si anima, se l'ho impostato come NSTextAttachment, nessuna animazione.

Apprezzerei qualsiasi feedback. Grazie!

+1

Chiedendo la stessa cosa stamattina. – yellottyellott

+0

È possibile fornire uno screenshot di come appare in WebView, che si sta tentando di replicare con UIImage e UITextView. Questo aiuterà a visualizzarlo meglio e ad aiutare con le risposte. – pteofil

+0

@pteofil Non posso fare lo screenshot perché non saprai che l'immagine si sta animando, sembrerebbe solo un'immagine statica. Per chiarire: Voglio animare una UIImage all'interno di una UITextView tramite NSTextAttachment all'interno di una NSAttributedString * senza * la necessità di oggetti UIImageView aggiuntivi. È possibile ignorare il fatto che ciò è stato fatto in precedenza con UIWebView. UIImage ha proprietà (immagini, durata) per l'impostazione di fotogrammi animati, che attualmente ho configurato. Se lo assegno a UIImageView, si anima, se lo imposto come NSTextAttachment, nessuna animazione. – afrederick

risposta

2

Penso che questo comportamento sia dovuto al fatto che lo UITextView non visualizza gli allegati utilizzando le visualizzazioni secondarie UIImageView. Quando osservo la gerarchia della vista con e senza il numero NSTextAttachment aggiunto allo UITextView, non vedo alcuna nuova vista (è possibile osservare la gerarchia della vista utilizzando Visualizza debug in Xcode o dicendo [[[UIApplication sharedApplication] keyWindow] recursiveDescription]). Presumibilmente, lo UITextView disegna direttamente i suoi allegati.

Detto questo, in un modo che posso pensare di includere un allegato animatable è quello di creare un animato UIImageView te stesso come una visualizzazione secondaria del UITextView, posizionarlo esattamente dove il NSLayoutManager luoghi del NSTextAttachment, e scorrere ogni volta che i rotoli UITextView. È possibile ottenere il rettangolo di NSTextAttachment da NSLayoutManager chiamando boundingRectForGlyphRange:inTextContainer: (possibilmente in layoutManager:didCompleteLayoutForTextContainer:atEnd:).

+0

Sì, questa è la "opzione teorica" ​​di cui ho parlato nella mia domanda. È abbastanza hacky e mi piacerebbe evitare questo approccio, se possibile, dal momento che sarà fragile e richiederà una tonnellata di gestione extra di quelle sottoview di 'UIImageView'. Il 'UITextView' che sto usando è contenuto in un' UICollectionViewCell' quindi la cella dovrebbe gestire le loro posizioni e il loro ciclo di vita. Quando ho iniziato a fare ricerche, ho fatto quello che hai detto: ho ispezionato le sottoview della vista testuale nella speranza che annidasse alcune immagini che potevo animare, ma non ci sono subviews, tutto il rendering viene eseguito all'interno di un 'CATiledLayer'. – afrederick

+0

Se la vista testo è all'interno di una vista insieme, sarà necessario gestire le posizioni e i cicli di vita delle viste dell'immagine nello stesso modo in cui si fa per la visualizzazione del testo. È possibile creare la sottoscheda di UIImageView ogni volta che si crea UITextView e inserirli in didCompleteLayout. Se la vista testo è all'interno di una vista insieme, presumo che tu non stia utilizzando le funzioni di scorrimento della visualizzazione testo: in tal caso, non dovrai preoccuparti di scorrere la visualizzazione dell'immagine. – roop