2011-11-25 7 views
14

Desidero sovrascrivere le icone emoji con la mia grafica personalizzata (solo all'interno della mia app).Sovrascrittura grafica Emoji

Da quanto ho letto finora, una possibile soluzione è creare un'estensione di carattere personalizzata che sostituisca i caratteri Unicode desiderati. Preferibile vorrei mantenere l'interoperabilità con CATextLayer.

Modifica: Sembra che i caratteri personalizzati non siano la mia soluzione; i caratteri devono essere definiti in scala di grigi. Prossima possibilità: creazione di un CALayer personalizzato, suddivisione della stringa in segmenti basati sul codice emoji e impostazione manuale del tipo + rendering della grafica (ovvero con grafica core e testo principale)

Modifica: cerca anche di mantenere prestazioni di scorrimento uniformi in una vista tabella.

+0

Potrebbe essere questo sarebbe di aiuto - http://stackoverflow.com/questions/1225514/making-an-emoji-enabeling-app – Sagar

risposta

2

Ho dedicato molto tempo a cercare di fare lo stesso. La soluzione migliore è quella di sostituire i valori Unicode per le emoji nella tua NSString ad es. \ uE100 ecc. con una stringa segnaposto. È possibile sostituire le codifiche di emoji con un tag HTML e utilizzare UIWenViews o DTCoreText per disegnare l'immagine in linea. ho fatto questo, funziona troppo, ma sarà un po 'lento

Ecco un piccolo antipasto (specialmente se si desidera visualizzare questa etichetta in vista tabella.):

Fai un dizionario con UIImages come oggetti e stringhe segnaposto come chiavi:

 self.emoticonDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"happyEmoticon.png", @":)", 
         @"sadEmoticon.png",  @":(", 
         @"testImg.png",   @"\uE100", 
         nil]; 


__block NSString *text1 = [NSString stringWithFormat:@"<html><p>%@</p></html>",text]; 
    [self.emoticonDict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) { 
     text1 = [text1 stringByReplacingOccurrencesOfString:key withString:[NSString stringWithFormat:@"<img height= 15 width= 15 src=\"%@\">",obj]]; 
    }]; 

È possibile a questo punto del carico questo HTML in un UIWebView e si avrà ciò che si desidera.

[myWebView loadData:_htmlData MIMEType:@"text/html" textEncodingName:@"utf-8" baseURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]];//do create the webview first 

Se la bassa velocità di UIWebView è un problema, è possibile leggere in anticipo. In entrambi i casi, guarda la nota verso la fine di questa risposta.

Per creare una DTAttributedLabel, facciamo la seguente: Per prima cosa costruire un NSattributedString utilizzando il DTHTMLAttributedStringBuilder:

NSAttributedString *temp = [[[DTHTMLAttributedStringBuilder alloc] initWithHTML:text1 
                options:@{ 
            DTDefaultFontFamily: @"Helvetica", 
            DTDefaultFontSize:@15,}; 
            documentAttributes:nil] 
            generatedAttributedString]; 

Quindi è possibile utilizzare un'istanza DTAttributedLabel per visualizzare temperatura.

self.tempLabel.attributedString = temp;//create a DTAttributedLabel Instance called tempLabel before this, I had it as a property 

Il mio obiettivo era di generare dell'etichetta testo veramente veloce (Tabella Viste) sostenendo emoticon personalizzate. I DTAttribuiti sono veloci (molto più veloci di un UIWebView) NOTA: Ho anche creato un carattere personalizzato in cui avevo mappato i valori unicode per gli emoji a un glifo personalizzato. Con mia sorpresa, erano ancora visualizzati gli emoji predefiniti. Vorrei affermare qui che ogni volta che iOS (CoreText) incontra un personaggio il cui valore si trova nella sezione Emoji, lo disegna usando il font AppleColorEmoji per impostazione predefinita.La mancanza di documentazione su come il font Emoji di Apple Color sia effettivamente disegnato su iOS, in realtà, mi rende difficile dimostrarlo, ma questa sembra una spiegazione plausibile. Se si rilascia un'emoji dall'app della palette dei caratteri su un file in textEdit, quindi selezionarla e provare a cambiare il carattere, si vede che non succede. Analogamente, se digiti del testo, quindi selezionalo e prova a cambiarlo in Apple Color Emoji, vedrai che non succede. Quando ho decompilato il carattere Emoji di Apple Color, non ho trovato mappature di caratteri o glifi per caratteri testuali (tranne 0-9). In qualche modo, anche se imposti il ​​carattere di un'etichetta come Emoji a colori Apple, il carattere per la parte testuale (non emoji) del testo dell'etichetta è impostato su qualcos'altro.

Gentilmente sentitevi liberi di commentare e condividere le vostre conoscenze poiché questa regione intorno al carattere Apple Color Emoji rimane ancora molto poco chiara.

+0

Fantastico. È passato molto tempo da quando ho toccato questo problema e non lavoro su iOS da mesi. Ma tu hai il mio upvote! – lorean

0

Una soluzione potrebbe essere quella di utilizzare il delegato UITextField o TextView e ascoltare l'input dell'utente. Quando digitano un personaggio emoji, inserisci un numero UIImageView in linea con il testo ed elimina l'icona emoji con l'input.

+0

Grazie per i suggerimenti. Sfortunatamente, nel mio caso ho bisogno di evitare l'uso di oggetti UIKit, poiché soffrono di prestazioni di scorrimento irregolare. – lorean

+0

@lorean Se ottieni problemi di prestazioni a scorrimento solo includendo alcune UIViews, probabilmente stai facendo qualcosa di sconsiderato, come ad esempio modificare il backup di CALayer. Puoi elaborare? –

+0

Ciao Conrad. Ho fatto test approfonditi usando UIViews in tableCells. Non riuscivo mai a far scorrere la cella del tavolo perfettamente senza problemi. Ci sarebbe sempre stato un salto di frame e occasionalmente una frequenza fotogrammi complessiva bassa. Quello che faccio è collassare la gerarchia della vista in un drawRect: o più recentemente creando una composizione di CALayers. Se hai qualche codice di esempio di un tavoloViewCell complicato costruito interamente con UIViews con eccellenti prestazioni di scorrimento, mi piacerebbe davvero vederlo! – lorean

0

C'è qualche menzione di questo problema sui devforum privati ​​di Apple (a cui si ha accesso se sei un utente registrato del programma per sviluppatori iOS).

Sembra che la soluzione potenziale sia quella di impostare esplicitamente il carattere per qualsiasi cosa si stia tentando di visualizzare.

+0

Ho accesso ai forum, ma non riesco a trovare nulla. Anche la ricerca di emoji restituisce risultati di ricerca pari a zero. – lorean

+0

Alcuni collegamenti potrebbero essere utili, @ Michael? – Emil

+0

Ciao @Emil ... [ecco uno] (https://devforums.apple.com/it/message/531811#531811) (le prime due risposte in quel thread parlano dell'impostazione di un font); Mi chiedo se il flag plist di 'KeyboardEmojiEverywhere' possa funzionare all'interno di un plist di una singola applicazione? In caso contrario, ti consigliamo di presentare una richiesta di funzionalità su bugreporter.apple.com. –