2

IOS プラットフォームで epub リーダーを作成しています。基本的に、UIWebview を使用して epub ファイルを表示します。オープン ソースの Aepubreader のコードを読んだところ、非常に優れていることがわかりましたが、テキスト ベースではありません。iBooksのようにテキストベースでページめくりをしたいです。だから私はAepubreaderを改良しようとします

基本的なロジックの流れは

  1. epub ファイルを解凍します。
  2. メタデータ (opf、toc ファイル) を解析します。
  3. UIWebView で html ファイルを読み込み、UIPageViewController にバインドします

パフォーマンス以外はすべてうまく機能します。

epub に 10 個の html ファイル (file1 - file10) があるとします。file1 ~ file9 は小さいサイズ (100k 程度) ですが、file 10 は 1MB です。file10 の最初のページまで読み込むと、この 1MB のファイルを読み込むのにかなりの時間がかかります。初めてなので納得です。しかし、file10 の 2 ページ目に目を向けると、. この 1MB のファイルを再度ロードし、js を呼び出してページ番号で offsetx をスクロールする必要があります (Apple の公式ドキュメントごとに UIWebView をコピーする方法はありません)。これは受け入れられません。このファイルのページをめくるとき、ユーザーを常に待たせることはできません。

最後に、この大きなファイルのリロードを回避する解決策を得ました。file10 の最初のページが表示されたとき。この表示されているビューを画像としてキャプチャしますが、表示はしません。次のページに移動するときに、この画像を page1 に表示します。その間、UIwebview を page1 から page2 に渡します。Page2.view.addSubview(webviewfrompage1) のように。これにより、webview のリロードが回避され、時間を節約できます。しかし、別の問題が発生しています。Pag​​e2.view.addSubview(webviewfrompage1) は page2 layoutsubview を引き起こします。これは、page2 がそのビューを再描画して webview コンテンツを表示することを意味します。これは 1MB のファイル コンテンツであり、再描画にはまだ時間がかかり、ページめくりのアニメーションが動かなくなります。私はたくさん検索しましたが、まだ解決策がありません。iBooksをチェックしましたが、完璧に動作します。大きなファイルをどのように処理しましたか?

これについて何か考えがあれば教えてください。または epub 表示を処理する他のソリューション。

前もって感謝します

-------------------------------------------------- -------------------------------------------

虎三郎への返信:

はい、あなたは絶対に正しいです。次のページのコンテンツを取得するために window.scroll(offsetX, offsetY) を使用する予定でした。しかし、それだけでは十分ではありません。ibooks のようなページめくりアニメーションが欲しい。そこで、UIPageViewController を使用します。UIPageViewController を使用すると、次の 2 つのデリゲートを実装する必要があります。

-(UIViewController *)pageViewController: (UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController { }

  • (UIViewController *)pageViewController: (UIPageViewController *)pageViewController viewControllerBeforeViewController: (UIViewController *)viewController{

}

各デリゲートで、viewcontroller を割り当て、URL をリロードし、オフセットを適切なページの場所に設定する必要があります。したがって、ページをめくるたびに、コンテンツのオフセットを設定するだけでなく、新しい uiwebview を割り当てて URL をリロードしてからオフセットを設定します。

虎三郎、どう思う?

4

0 に答える 0