0

iOS で Acapela TTS を使用しています。読み上げたいすべてのテキスト (およびマークアップ) を含む HTML ドキュメントがあります。テキストは段落に分割されており、各ヘッダーで TTS を開始できるようにしたいと考えています。現時点では、各段落を独自の UIWebView (内部マークアップを処理するため) に配置し、これらを UIScrollView に追加してすべての要素をナビゲートします。各 UIWebView はボタンでオーバーロードされているため、ボタンを押すと、接続されたテキストが読み上げられます。私の問題は、フレーム(静的なy位置を意味する)を使用してUIWebViewとボタンを配置する必要があることですが、これには現在の問題である正確な高さが必要です。この質問に記載されているソリューションを使用してみました: UIWebView の高さ、それでも見栄えがよくありません-Webビューが高すぎるか短すぎるため、完璧にする必要があるため、一貫したWebページのように見えます.

私が見落としていた別の Web ビューに分割せずに、このタイプの TTS を実行する別の方法を知っている人はいますか?

これは、UIWebViews を配置する私のコードです。

float yOffset = 0;
UIWebView *previous = nil;

//UIWebView delegate
-(void)webViewDidFinishLoad:(UIWebView *)webView{

NSString *height = [webView stringByEvaluatingJavaScriptFromString:@"document.body.scrollHeight;"];

if(previous!=nil){
    yOffset += previous.frame.size.height;
}
CGFloat h = [height floatValue];

CGRect frame = CGRectMake(0, yOffset, scrollView.frame.size.width, h); 

[webView setFrame:frame];
[webView setOpaque:NO];
[webView setBackgroundColor:[UIColor whiteColor]];
previous = webView;
[scrollView addSubview:webView];

yOffset += previous.frame.size.height;

[scrollView setContentSize:CGSizeMake(scrollView.frame.size.width, yOffset)];

}

4

1 に答える 1

0

アイデア: 完全な段落を、段落の識別子を指すクリック可能なリンクに変えることができます。次に、クリックイベントをオーバーライドしてUIWebViewDelegate、javascript で段落テキストを取得できます。私は次のようなことを意味します:

HTML:

<p id="paragraph1"><a href="paragraph1">First paragraph</a></p>
<p id="paragraph2"><a href="paragraph2">Second paragraph</a></p>

shouldStartLoadWithRequestの実装UIWebViewDelegate:

           - (BOOL)webView:(UIWebView *)webView 
shouldStartLoadWithRequest:(NSURLRequest *)request 
            navigationType:(UIWebViewNavigationType)navigationType 
{
  NSString* link = [request.URL lastPathComponent]; // not sure

  // use rangeOfString to find all
  if (inType == UIWebViewNavigationTypeLinkClicked && [link compare:@"paragraph1"] == NSOrderedSame) 
  { 
    // check this
    NSString* javaScript = 
      [NSString stringWithFormat:@"document.getElementById('%@').nodeValue", link]; 
    NSString paragraphToRead = 
      [webView stringByEvaluatingJavaScriptFromString:javaScript];
    // read out paragraphToRead
    return NO;
  }
}
于 2012-04-26T09:42:21.593 に答える