2012-04-24 19 views
2

私はepubリーダーで作業していますが、単にhtmlファイルのパスを取得するためのリーダー構造を構築してUIWebViewにロードしてから、章をページングして表示します。 webViewのテキストが表示され、メモ、ハイライトテキスト、共有などの複数の機能が表示されます。すべてがうまくいっていますが、いくつかの本には大きな章(htmlファイルサイズ約180kb、普通は約30〜50kbです)が含まれているという特殊なケースがあります。この種の章では、テキストを選択するとUIMenuController多くの時間が表示されます!最後に表示され、うまく動作していますが、この時間を待つユーザーには迷惑です(ここでは約7秒です!!)。私のビルドターゲットはiOS 4 & 5です。これはシミュレータで発生していますとデバイス..誰も助けを提供できますか?UIMenuControllerは非常にゆっくりと応答します

編集:私のViewControllerで

canPerformAction:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender 
{ 
    BOOL can = [super canPerformAction:action withSender:sender]; 

    if(action == @selector(copyPressed::) || 
     action == @selector(addNotePressed:) || 
     action == @selector(sharePressed:) || 
     action == @selector(highlightPressed:)) 
    { 
     can = YES; 
    } 

    if (action == @selector(copy:) || action == @selector(_define:) || action == @selector(selectAll:) || action == @selector(select:)) 
    { 
     can = NO; 
    } 

    return can; 
} 
+0

「canPerformAction」関数によって発生している可能性が最も高いです。あなたの見た目はどうですか? – borrrden

+0

私の編集をチェックしてください。 –

+1

さて、それはありません...私の次の推測では、すべてのHTMLを1つの長いストリームにロードしており、メニューコントローラはポップオーバーをどこに置くべきかについて懸命に考える必要があります。インストゥルメントのタイムプロファイラ機能を使用すると、時間のかかる機能を確認できます。あなたがそれをした後、あなたは何がそんなに長くかかっているのかをよりよく知ることができます。それまでは、それを引き起こしていることを言うのは難しいです。 – borrrden

答えて

0

私は、同じプロジェクトに取り組んでいるとちょうどUIMenuControllerと同じ機能を実装しています。大きなチャプターでメニューを表示するのに遅れていることは気づいていません。 UIWebViewでタッチイベントがどのように処理されているかを追加のジェスチャーなどとともに説明できますか?また、チャプターが読み込まれたときに実行されているjavascriptがありますか?

+0

単純な方法でそれを記述するために私は私のwebViewクラスからhitTestメソッドを介してタッチを受け取ります。私はWebViewのサブクラスに間違っていることを知っていますが、hitTestメソッドを除いてこのクラスの中に何もありません。ハイライトされたテキストを押すと、タッチポイントがどこにあるのか正確に知る必要があります。ハイライトを押すjavaScriptからurlを受け取るので、このテキストを削除または共有したい場合はpop menuを表示します。これらの場合の遅延は全くありません。私が記述しているように、大きな章では通常の選択 –

+0

です。 –

+0

私はUIWebViewをサブクラス化しますが、canPerformA ctionを継承し、UIWebViewデリゲートを拡張して、ビューを所有するUIViewControllerにメニュー選択項目を渡します。健全性チェックとして、UIMenuControllerのsetMenuVisibleの 'animated'オプションを変更するとパフォーマンスに影響しますか?どのようにメニューを構築して表示していますか?私自身は、すべてのメニューオプションをあらかじめ構築しておいて、自分のメニュー状態を使ってcanPerformActionに表示するものを選択します。 –

関連する問題