2013-04-05 20 views
7

Pracuję nad aplikacją xmpp-client. Jedną z funkcji jest wysyłanie uśmiechów, a użytkownik powinien mieć możliwość edytowania jej jak zwykłego tekstu. Edycja emotikonów w Viber App jest najlepszym przykładem tego, co chcę zaimplementować.UITextView z edycją emotikonów

Próbowałem już trzy sposoby rozwiązania problemu:

  • tworzę emotikon jak zwykle UIImageView i umieścić go jako podrzędny na UITextView używając aktualnego daszka rect. Używam 5 białych znaków jako tekstu zastępczego w widoku tekstowym. Występują dwa problemy: umieszczanie emotikonów na nowej linii podczas wstawiania tekstu w środku (drukowanie białych znaków nie powoduje przesuwania kursora do nowej linii); gdy użytkownik umieszcza karetkę za pomocą szkła powiększającego, może przenosić karetkę przez emotikon (przez 5 białych znaków), jako metoda delegowana, która nie jest wywoływana podczas tego procesu.
  • Próbowałem EGOTextView. Występują problemy z pozycją karetki i zmianą rozmiaru, kiedy należy dodać nową linię. I są pewne artefakty renderowania, gdy używa się go w jednym rozmiarze linii.
  • Próbowałem również za pomocą UIWebView. Wystąpiły jednak duże problemy z rozmiarem w oparciu o rozmiar tekstu i inne artefakty z szybkością reakcji, gdy stawał się pierwszym respondentem.

Być może ktoś mógłby mi doradzić, jak naprawdę działające rozwiązanie?

Odpowiedz

2

Nie jestem tak naprawdę mechanizmem rects and ranges UITextView/UITextInput, ale staram się dać ci (nieprzetestowaną) radę, która może osiągnąć oczekiwany rezultat.

Wbudowane emotikony iOS to proste znaki, więc możemy podążać tą samą ścieżką, budując niestandardową czcionkę (lub rozszerzając istniejącą). Mamy dwie opcje:

  • Jeśli chcesz kierować iOS 6.0 (który posiada natywne wsparcie dla NSAttributedString w zajęciach UIKit), można spróbować zbudować niestandardową czcionkę zawierającą wszystkie emotikony trzeba, i użyj go wewnątrz swojego NSAttributedString (przypisany ciąg może mieszać różne czcionki, rozmiary czcionek, style i tak dalej).

  • Można zrobić coś podobnego z iOS 5, ale ponieważ nie można używać wewnątrz UITextViewNSAttributedString (tak jesteś ograniczony do tylko jednej czcionki dla całego tekstu) należy użyć czcionki, która łączy ze sobą rzeczywisty znaki i niestandardowe emotikony: więc powinieneś rozszerzyć czcionkę, której chcesz użyć do pisania, dodając do niej wszystkie emotikony. Nie wiem, czy to mogło mieć konsekwencje dla licencji.

W przeciwnym razie, zawsze można pójść znacznie bardziej niskiego poziomu wdrażania swój własny TextView korzystając CoreText, ale myślę, że będzie to ciężka praca.

+0

Dziękuję za poradę. Zacząłem też myśleć o dostosowywaniu czcionek, ale właściwie nie wiem, jak tworzyć kolorowe znaczniki bitmapowe w czcionkach takich jak emoji Apple. – yariksmirnov

+0

Czy istnieje sposób na umieszczanie kolorowych czcionek w czcionce na iOS? – Stavash

+0

Udało mi się stworzyć niestandardową czcionkę z tabelą sbix przy użyciu niestandardowych obrazów png. Doskonale działa na OS X, ale iOS odmówił renderowania glifów, które mają tylko mapowanie do tabeli sbix z czcionek innych niż wersja systemu Emoji firmy Apple. Innymi słowy, jeśli ustawisz niestandardową czcionkę w UITextView na UILabel programowo i ustawisz wartość tekstową jako niektóre kody symboli UTF emoji, glyph ze standardowej czcionki emoji będą renderowane, nawet jeśli w twoim niestandardowym kroju czcionki pojawią się dla tego kodu UTF. – yariksmirnov