2013-04-05 14 views
7

Sto sviluppando l'app xmpp-client. Una delle caratteristiche è l'invio di sorrisi e l'utente dovrebbe avere la possibilità di modificare il suo simile testo usuall. La modifica di emoticon in Viber App è il miglior esempio di ciò che voglio implementare.UITextView con la modifica di emoticon

Ho già provato tre modi per risolvere il problema:

  • creo emoticon come al solito UIImageView e posizionarlo come una visualizzazione secondaria sul UITextView utilizzando corrente rect accento circonflesso. Uso 5 spazi bianchi come segnaposto di testo nella vista testo. Ci sono due problemi: con l'inserimento di emoticon su una nuova riga quando si inserisce del testo nel mezzo (la stampa degli spazi non fa spostare il cursore sulla nuova riga); quando l'utente inserisce il caret usando il magnify glass, può spostare il caret attraverso l'emoticon (attraverso 5 spazi bianchi), poiché il metodo delegate non viene chiamato durante questo processo.
  • Ho provato EGOTextView. Ci sono problemi con la posizione del cursore e il ridimensionamento quando è necessario aggiungere una nuova linea. E ci sono alcuni artefatti di rendering quando lo si utilizza con una dimensione di linea.
  • Ho anche provato a utilizzare UIWebView. Ma ci sono stati grossi problemi con il ridimensionamento in base alle dimensioni del testo e ad altri artefatti con velocità di risposta quando si trattava del primo soccorritore.

Qualcuno potrebbe darmi consigli su soluzioni davvero funzionanti?

risposta

2

Non sono davvero interessato al meccanismo di distanza e intervallo di UITextView/UITextInput, ma cerco di darvi un consiglio (non verificato) che potrebbe raggiungere il risultato previsto.

Gli emoji iOS integrati sono caratteri semplici, quindi è possibile seguire lo stesso percorso creando un carattere personalizzato (o estendendone uno esistente). abbiamo due opzioni:

  • Se si vuole indirizzare iOS 6.0 (che ha il supporto nativo per NSAttributedString nelle classi UIKit), si potrebbe provare a costruire un carattere personalizzato che contiene tutte le emoticon si ha bisogno, e usalo all'interno del tuo NSAttributedString (la stringa attribuita può mescolare caratteri diversi, dimensioni, stili e così via).

  • Si potrebbe fare qualcosa di simile con iOS 5, ma dal momento che non è possibile utilizzare NSAttributedString all'interno UITextView (così si sono limitati a un solo tipo di carattere per l'intero testo) è necessario utilizzare un tipo di carattere che unisce insieme l'attuale caratteri e le emoticon personalizzate: quindi è necessario estendere il carattere che si desidera utilizzare per la digitazione, aggiungendo tutte le emoticon ad esso. Non so se questo potrebbe avere implicazioni di licenze, comunque.

In caso contrario, si può sempre andare molto più a basso livello, implementando il proprio textView personalizzato utilizzando CoreText, ma credo che sarebbe stato un duro lavoro.

+0

Grazie per il consiglio. Comincio anche a pensare alla personalizzazione dei font, ma in realtà non so come creare gli glifi bitmap a colori in caratteri come emoji di Apple. – yariksmirnov

+0

C'è un modo per incorporare immagini colorate all'interno di un font su iOS? – Stavash

+0

Sono riuscito a creare caratteri personalizzati con la tabella sbix usando immagini png personalizzate. Funziona perfettamente su OS X, ma iOS ha rifiutato di eseguire il rendering di glifi che hanno solo il mapping alla tabella sbix dal font diverso dalla versione di sistema di Apple Emoji. In altre parole, se si imposta il carattere personalizzato in UITextView su UILabel in modo programmatico e si imposta il valore del testo come il codice di un simbolo UTF dell'emoji, il glifo del carattere standard di emoji, verrà visualizzato anche se nel glifo del carattere personalizzato si presenta per quel codice UTF. – yariksmirnov