2010-11-17 13 views
8

Przechwytywam dane tekstowe z plików XML i chcę, aby wyświetlały się w formacie podobnym do strony książki wewnątrz urządzenia UIWebView na iPadzie. Pliki XML wychodzą z .epub, a każdy z nich zawiera pojedynczy rozdział książki, podzielony tylko na tagi p.Pagórka w stylu Ereadera

Chcę dynamicznie paginate te pliki na stronach książki, jak na podstawie wielkości UIWebView, który jest pełen ekran iPada, a także przez wybranego przez użytkownika rozmiaru czcionki. Aktualnie ładuję pustą stronę html z powiązanym plikiem css do UIWebView, chwytając akapity w oparciu o liczbę znaków jako napisy z pliku XML i drukując je w html przy użyciu StringByEvaluatingJavaScriptFromString i właściwości innerHTML.

Oczywiście robi to według liczby znaków, tworząc niepoprawnie rozmieszczone, dziwnie sformatowane strony, ale nie jestem pewien, jak inaczej "paginować" tekst.

Co chcę zrobić, to coś podobnego do aplikacji "eReader" na iPadzie: http://www.ereader.com/. Wygląda na to, że dzieliją jeden plik na strony dynamicznie i ładują go do UIWebView s. Jak to się robi?

Odpowiedz

2

Większość czytników EPUB opartych na UIWebView używa po prostu kolumn CSS3 do paginacji dokumentu.

Można to zobaczyć w akcji na http://www.quirksmode.org/css/multicolumn.html

Podstawowym założeniem jest to, że jesteś columnize "dokument, a następnie przewinąć poziomo przez to pokazać konkretną stronę.

Po wykonaniu tej czynności dla jednej popularnej (kanadyjskiej) aplikacji eReader na iPhonie i iPadzie, mogę powiedzieć, że technika działa, ale jest daleka od ideału.

+0

Jest to bardzo interesujące i zdecydowanie pomocne. Kolejne pytania to: czy CSS "zmaterializuje" cały rozdział, czy istnieje sposób na dostęp i edycję zawartości kolumny przez DOM, aby dynamicznie zmieniać numery stron itp.? Co więcej, w jaki sposób ogranicza się użytkownikowi swobodne przewijanie w poziomie w widoku, aby "zablokować" je w celu przeglądania jednej strony na raz? – Chris

+0

Również kolumny CSS3 działają dziwnie, gdy chcemy zwiększyć szerokość kolumny (powiedzmy, o rozmiarze okna iPada). Jakie jest twoje rozwiązanie? Zadałem osobne pytanie: http: //stackoverflow.com/questions/4217936/css3-columns-and-uiwebview – Chris

+0

To naprawdę ciekawe podejście. Czy potrafisz obsłużyć wbudowane kolumny EPUB przy użyciu tego podejścia, czy też złamałoby to sztuczkę "paginacji"? –

1

Kod został już wprowadzony. Nazywa się epubjs. Jest to czytnik epubowy wyłącznie w języku JavaScript.

+0

To jest dość eleganckie. Sprawdziłem svn i uruchomiłem go z kilkoma innymi .epubami. Problem polega na tym, że kiedy dostaję pliki do Xcode i ładuję UIWebView index.html, całość się rozpada. tylko treść tagu informacyjnego jest widoczna i nie ma stylów. – Chris

+0

Inną opcją jest użycie funkcji płynnego przewijania w programie Motools, Jquery itp. Renderuj swoją stronę internetową w wielu kolumnach, a następnie przeglądaj znaczniki hashowania. Oto ładne demo w witrynie JQuery przewijanie do dowolnej treści na stronie. –

0

Użyj UITextView z PageviewController. (podaj w nim swoje wątpliwości)